在Prolog中递归创建列表

时间:2015-11-28 23:07:55

标签: list prolog tuples

我在PROLOG中有代码:

vals(_,[],_).
vals([H|T],[(H,C)|L],K) :- vals([H|T],L,(K,C)).

此代码接收器列表和元组列表,例如:

 vals([1],[(1,4),(1,2)],X).

我检查第一个列表中的元素是否等于另一个列表中的某个元组第一个元素。在这种情况下,foundValues将返回true,因为1等于每个元组的第一个元素。这工作正常,但不是返回true / false,而是在结果列表中我想返回每个元组的所有第二个元素,其第一个元素等于list中的元素。在这种情况下,X应为[4,2]。我试图用(K,C)做这个,但没有成功。 所以,问题是 - 如何返回列表?

1 个答案:

答案 0 :(得分:1)

这是一个关于如何附加到列表的示例,仅用于1个元素。

三种情况:

  • 获取空列表
  • 当元素与tupple的第一个条目匹配时
  • 元素不匹配时

从这开始你应该能够创建你的例子。

vals(_,[],[]).
vals(H,[(H,C)|L],[C|K]) :- vals(H,L,K).
vals(H,[(H2,_)|L],K) :- 
    H \= H2,
    vals(H,L,K).

示例:

vals(1,[(1,2),(1,3)],X).
X = [2, 3] ;
false.

额外:

  • 考虑在案例2中放置cut
  • 考虑使用accumulator
  • 重写此内容