我用 Prolog 列表完成了这项任务,我需要一些帮助。
在 Prolog 中构建一个程序
听起来你是序言的最开始。这些问题主要与 prolog 如何统一变量和表达式有关。
检查列表是否为空
empty([]).
Run Code Online (Sandbox Code Playgroud)
在序言中,您陈述事实和谓词。在这里,您只是说明任何空列表都为真。暗示所有其他表达式都是错误的。
检查列表是否不为空
not_empty([_|_]).
Run Code Online (Sandbox Code Playgroud)
(由潜伏者改进)。此规则匹配至少有一个头部和零个或多个尾部元素的列表,因此空列表将失败。
检查列表是否只有一个元素
one([_]).
Run Code Online (Sandbox Code Playgroud)
当 prolog 检查这一事实时,它只能绑定到一个包含一个元素的列表。所以它绑定的事实已经证明它是一个单元素列表。
检查列表是否有 2 个或更多元素
two([_,_|_]).
Run Code Online (Sandbox Code Playgroud)
前 2 个下划线绑定到列表中的 2 个元素,第三个下划线绑定零个或多个尾随元素。所以这只会在具有两个或更多元素的列表上评估为真。
从列表中获取第一个元素
first([H|_], H).
Run Code Online (Sandbox Code Playgroud)
Prolog 将绑定H到第一个参数和第二个参数中列表的第一个元素。你用 来调用它first([1,2,3],F).。Prolog 将绑定F到列表的第一个元素。你也可以调用它first([1,2,3],1).来询问是否1是第一个元素。
从列表中获取第二个元素
second([_,I|_], I).
Run Code Online (Sandbox Code Playgroud)
仅使用简单绑定,第一个下划线与第一个元素、I第二个元素绑定,第二个下划线与列表的其余部分(如果有)绑定。如果您开始要求更高的元素,那么使用内置谓词nth1来为您完成工作会更容易。
获取没有第一个元素(尾部)的列表
tail([_|T],T).
Run Code Online (Sandbox Code Playgroud)
Prolog 将尾部绑定到T,它必须与第二个匹配T才能被认为是真的。
将元素添加到列表的头部
addelem(H,T,[H|T]).
Run Code Online (Sandbox Code Playgroud)
仅使用 Prolog 绑定,H将绑定到第三个参数中列表的前面,并绑定到列表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。