用于检查元素是否在列表中的另一个元素后面的谓词

时间:2016-12-31 19:23:15

标签: prolog

给出一个List和两个元素。首先,我需要检查这两个元素是否是列表的一部分。之后,检查元素是否Elem2   来自给定列表中的Elem1之后。 我使用的谓词是weiterHinten,带有3个参数。

例如:检查c是否在列表[a,c,b,a]中的b之后。

weiterHinten([H|T],H,B).
weiterHinten([H|T],A,B):-weiterHinten(T,A,B).

weiterHinten([a,c,b,a],b,c).

这个目标需要返回false。我知道,在我发现列表的Header等于A后,我需要检查B是否是尾部的成员列表。如果是,则表示B在列表中A之后,但我不确定如何执行此操作。

我试过了:

weiterHinten([H|T],H,B):-member(B,T). 

但无论何时我打电话给目标,无论Elem2 Elem1之后是<ol class="household"></ol> <form> <div> <label>Age <input type="text" name="age"> </label> </div> <div> <label>Relationship <select name="rel"> <option value="">---</option> <option value="self">Self</option> <option value="spouse">Spouse</option> <option value="child">Child</option> <option value="parent">Parent</option> <option value="grandparent">Grandparent</option> <option value="other">Other</option> </select> </label> </div> <div> <label>Smoker? <input type="checkbox" name="smoker"> </label> </div> <div> <button class="add">add</button> </div> <div> <button type="submit">submit</button> </div> </form> 还是

1 个答案:

答案 0 :(得分:1)

退出weiterHinten([H|T],H,B).规则。这是weiterHinten([H|T],H,B) :- true.的语法快捷方式,这是无稽之谈。

这对我有用:

weiterHinten([H|T],H,B) :- member(B, T).
weiterHinten([H|T],A,B) :- weiterHinten(T,A,B).

结果

| ?- weiterHinten([a,c,b,a],b,c).

no
| ?- weiterHinten([a,b,c,a],b,c).

true