Prolog:使用列表

时间:2015-09-17 21:40:46

标签: list prolog

我在Prolog列表中得到了这个任务,我需要一些帮助。

在Prolog中构建一个程序

  1. 检查列表是否为空
  2. 检查列表是否为空
  3. 检查列表是否只有一个元素
  4. 检查列表是否包含2个或更多元素
  5. 从列表中获取第一个元素
  6. 从列表中获取第二个元素
  7. 获取没有第一个元素(尾部)的列表
  8. 将元素添加到列表的头部

1 个答案:

答案 0 :(得分:4)

听起来你是prolog的开头。这些问题主要与prolog如何统一变量和表达式有关。

  1. 检查列表是否为空

    empty([]).
    

    在prolog中,你陈述事实和谓词。在这里,您只是声明任何空列表都是真的。暗示所有其他表达都是错误的。

  2. 检查列表是否为空

    not_empty([_|_]).
    

    (由潜伏者改进)。此规则匹配至少包含头部和零个或多个尾部元素的列表,因此空列表将失败。

  3. 检查列表是否只有一个元素

    one([_]).
    

    当prolog检查这个事实时,它只能绑定到包含一个元素的列表。所以它绑定的事实已经证明它是一个单元素列表。

  4. 检查列表是否包含2个或更多元素

    two([_,_|_]).
    

    前2个下划线绑定到列表中的2个元素,第3个下划线绑定到零个或多个尾随元素。因此,只有具有两个或更多元素的列表才会评估为真。

  5. 从列表中获取第一个元素

    first([H|_], H).
    

    Prolog会将H绑定到第一个参数和第二个参数中列表的第一个元素。你用first([1,2,3],F).来称呼它。 Prolog会将F绑定到列表的第一个元素。您也可以使用first([1,2,3],1).调用它来询问1是否是第一个元素。

  6. 从列表中获取第二个元素

    second([_,I|_], I).
    

    只使用简单绑定,第一个下划线与第一个元素绑定,I与第二个元素绑定,第二个下划线与列表的其余部分绑定(如果有的话)。如果您开始要求更高的元素,则可以更轻松地使用内置谓词(如nth1)来为您完成工作。

  7. 获取没有第一个元素(尾部)的列表

    tail([_|T],T).
    

    Prolog将尾部绑定到T,其必须与第二个T匹配才能被视为真。

  8. 将元素添加到列表的头部

    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