练习

转载自:https://mp.weixin.qq.com/s/yvlQFf6rfGB4FFEblT4e6g

4  练习

 

练习4.1   Prolog如何响应以下查询?

 

1. [a,b,c,d] = [a,[b,c,d]].

2. [a,b,c,d] = [a|[b,c,d]].

3. [a,b,c,d] = [a,b,[c,d]].

4. [a,b,c,d] = [a,b|[c,d]].

5. [a,b,c,d] = [a,b,c,[d]].

6. [a,b,c,d] = [a,b,c|[d]].

7. [a,b,c,d] = [a,b,c,d,[]].

8. [a,b,c,d] = [a,b,c,d|[]].

9. [] = _.

10. [] = [_].

11. [] = [_|[]].

 

练习4.2  语法上正确的下列哪些是E表?如果表示是正确的,表有多少个元素?

 

1. [1|[2,3,4]]

2. [1,2,3|[]]

3. [1|2,3,4]

4. [1|[2|[3|[4]]]]

5. [1,2,3,4|[]]

6. [[]|[]]

7. [[1,2]|4]

8. [[1,2],[3,4]|[5,6,7]]

 

练习4.3  编写谓词second(X, List)来检查X是否是List的第二个元素。

 

练习4.4  编写一个谓词swap12(List1, List2),它检查List1是否与List2相同,除了交换前两个元素。

 

练习4.5  假设我们具有以下事实的知识库:

 

tran(eins,one).

tran(zwei,two).

tran(drei,three).

tran(vier,four).

tran(fuenf,five).

tran(sechs,six).

tran(sieben,seven).

tran(acht,eight).

tran(neun,nine).

 

编写谓词listtran(G, E),将谓词数字表转换为相应的谓词数字表。例如:

 

listtran([eins,neun,zwei], X).

 

应该给出:

 

X = [one,nine,two].

 

您的程序也应该朝另一个方向工作。例如,如果您给它查询

 

?- listtran([eins,neun,zwei],X).

X = [one, nine, two].

 

它应该返回:

 

X = [eins,sieben,sechs,zwei].

 

(提示:要回答此问题,请先问自己“如何翻译数字单词的空表?”。这是基本情况。对于非空表,请先翻译表的头,然后使用递归来翻译尾巴。)

 

练习4.6  编写谓词twice(In,Out),其谓词的左参数是一个表,其谓词第二个参数的表是一个由两次写入左表中的每个元素组成的表。例如,查询

 

twice([a,4,buggle],X).

 

应该返回

 

X = [a,a,4,4,buggle,buggle]).

 

和查询

 

twice([1,2,1,1],X).

 

应该返回

 

X = [1,1,2,2,1,1,1,1].

 

(提示:要回答此问题,请先问自己“第一个参数为空表时会发生什么?”。这是基本情况。对于非空表,请考虑应该对头部使用什么,然后使用递归处理尾巴。)

 

练习4.7  绘制以下三个查询的搜索树:

 

?- member(a,[c,b,a,y]).

 

?- member(x,[a,b,c]).

 

?-member(X,[a,b,c]).

 

(搜索树在第2章中介绍了。)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值