我试图在Prolog中创建的谓词(通过命令行通过断言等)在理论上相当简单 . 第一个是第二个(X,List),它检查X是否是指定列表的第二个元素 . 另一个被调用两次([list],X),其中在左参数中放置一个列表就像这样打印该列表:[a,b,c]变为[a,a,b,b,c,c]
另外,使用相同的谓词,但右边的参数而不是左边的参数应该产生如下结果:[a,a,b,b]变为[a,b]
我真的不知道如何去做其中任何一个 . 我得到的列表被表示为[head | tail]但我仍然感到困惑 . 我怎样才能制作这些谓词?
1 回答
提示两者:"Tail"是一个列表,因此您可以将列表分解为
[Head | [Second|Tail] ]
.您可以使用此事实在一行中编写谓词
second(X, List)
.提示
twice(List, X)
谓词:使用递归!基本情况:当"X"是单元素列表时"List"应该是什么?
递归案例:将List分解为Head,Second和Tail1 . 将X分解为头部和尾部2 . 需要什么才能成为这些 Value 观之间的关系?确保在此递归调用两次 .
要查看关系,请注意
twice([a,a,b,b], [a,b])
应评估为true .在这种情况下,
List = [a,a,b,b]
,所以Head = a
,Second = a
和Tail1 = [b, b]
.此外,
X = [a,b]
soHead = a
,Tail2 = [b]
. 所以我们需要检查的是两个头和第二个都是相等的,并且twice(Tail1, Tail2)
是真的 .