我在Prolog列表中得到了这个任务,我需要一些帮助。
在Prolog中构建一个程序
答案 0 :(得分:4)
听起来你是prolog的开头。这些问题主要与prolog如何统一变量和表达式有关。
检查列表是否为空
empty([]).
在prolog中,你陈述事实和谓词。在这里,您只是声明任何空列表都是真的。暗示所有其他表达都是错误的。
检查列表是否为空
not_empty([_|_]).
(由潜伏者改进)。此规则匹配至少包含头部和零个或多个尾部元素的列表,因此空列表将失败。
检查列表是否只有一个元素
one([_]).
当prolog检查这个事实时,它只能绑定到包含一个元素的列表。所以它绑定的事实已经证明它是一个单元素列表。
检查列表是否包含2个或更多元素
two([_,_|_]).
前2个下划线绑定到列表中的2个元素,第3个下划线绑定到零个或多个尾随元素。因此,只有具有两个或更多元素的列表才会评估为真。
从列表中获取第一个元素
first([H|_], H).
Prolog会将H
绑定到第一个参数和第二个参数中列表的第一个元素。你用first([1,2,3],F).
来称呼它。 Prolog会将F
绑定到列表的第一个元素。您也可以使用first([1,2,3],1).
调用它来询问1
是否是第一个元素。
从列表中获取第二个元素
second([_,I|_], I).
只使用简单绑定,第一个下划线与第一个元素绑定,I
与第二个元素绑定,第二个下划线与列表的其余部分绑定(如果有的话)。如果您开始要求更高的元素,则可以更轻松地使用内置谓词(如nth1
)来为您完成工作。
获取没有第一个元素(尾部)的列表
tail([_|T],T).
Prolog将尾部绑定到T
,其必须与第二个T
匹配才能被视为真。
将元素添加到列表的头部
addelem(H,T,[H|T]).
只需使用Prolog绑定,H
将绑定到第3个参数中列表的前面,T
绑定到列表的尾部。用
addelem(1,[2,3,4],T).
- 将T
绑定到[1,2,3,4]
。addelem(1,[2,3,4],[1,2,3,4]).
- 证明此结果是正确的。addelem(H, [2,3,4], [1,2,3,4]).
- 如果第二个参数与尾部匹配,则拉出第三个参数的第一个元素。addelem(1, T, [1,2,3,4]).
- 另一种获取尾巴的方式,如果头部为1
。