逻辑的空无

[] = _. true

从用途讲。没有东西,空无可以用空表表示。但空表不是无。

[]=[_]. false

从属性讲。空表是没有东西的表,不是原子、变量、事实、规则。它里面是空无的。

[[]] = [[]|[]]. true

从使用讲。老子说无生万物,那万物都递归回到无才能做对题目。

|

把表分成头和尾。原话是:Prolog has a special built-in operator | which can be used to decompose a list into its head and tail。" |"它的操作范围一定在表里,它的后面是表的项,项多于两个要加[]。 member(X,[1,2|3,4])。这样写是会报错的,要写成 member(X,[1,2|[3,4]])。

member

题不讲了,都能找到答案。看看官网的member:

member(X,[X|T]).
member(X,[H|T]) :- member(X,T).

题目答案第一行都是combine1([],[],[])、combine2([],[],[])、combine3([],[],[]),递归到最后无生万物。为什么member没有这样写?

member([],[]). false

列表自己不能是自己的成员。调试直接一步就失败了。

Call:member([],[])
Fail:member([],[])

调试trace, (member([a],[b])).

 Call:member([a],[b])
 Call:member([a],[])
 Fail:member([a],[])
 Fail:member([a],[b])

_

后面给另外一种写法的时间讲到了这个符号,说是匿名参数,意思用它替换没用的参数T和H。These unnecessary variable names are distracting: it’s better to write predicates in a way that focuses attention on what is really important in each clause, and the anonymous variable gives us a nice way of doing this. That is, we can rewrite member/2 as follows:

member(X,[X|_]).
member(X,[_|T]) :- member(X,T).

它是空无的意思吗?文章的开头它是等于空表的,但是

member([],_). true

看来它没有那么简单。它是个新的东西,可以是空表、事实,规则,变量,数组。

member(_,[]). false

这似乎自圆其说了,空表里没有东西。如果把答案第一行里最后一个[]改成_

combine3([], [], _).

 Call:combine3([f, b, yip, yup],[glu, gla, gli, glo],_7698)
 Call:combine3([b, yip, yup],[gla, gli, glo],_1566)
 Call:combine3([yip, yup],[gli, glo],_1584)
 Call:combine3([yup],[glo],_1602)
 Call:combine3([],[],_1602)
 Exit:combine3([],[],_1596)
 Exit:combine3([yup],[glo],[join(yup,glo)|_1596])
 Exit:combine3([yip, yup],[gli, glo],[join(yip,gli), join(yup,glo)|_1596])
 Exit:combine3([b, yip, yup],[gla, gli, glo],[join(b,gla), join(yip,gli), join(yup,glo)|_1596])
 Exit:combine3([f, b, yip, yup],[glu, gla, gli, glo],[join(f,glu), join(b,gla), join(yip,gli), join(yup,glo)|_1596])

调试中它是临时变量_1569,R=[join(f,glu), join(b,gla), join(yip,gli), join(yup,glo)|],从结果看只是增加了"|"两个字符,意思也大体是一样的。 [join(yup,glo)|_]= [join(yup,glo)]这个的答案也是真。

combine3([], [], [laozi]).

扩展,这样改会回答什么呢?

鹿邑老子学院内老子雕像鹿邑老子学院内老子雕像
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值