Win Prolog List部分有效

时间:2012-11-26 23:22:29

标签: list prolog win-prolog

我试图将储物柜与代码联系起来。这就是我到目前为止所做的。

    lockerof(C, [], V).
    lockerof(C,[C|_], V).
    lockerof(C, [[C, V]|_], V).

当我输入时:

    lockerof(a, [[a,1],[b,2]], V).

它给了我一个我得到的价值:

    V = 1

但是当我输入时:

    lockerof(b, [[a,1],[b,2]], V).

我得到'不'但我希望输出为:

    V =2

我做错了什么,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您还需要扫描列表的尾部。使用递归:

lockerof(C, [_|T], V) :- lockerof(C, T, V).

那就是“如果[C,V]在列表的尾部,那么它也在列表本身中”。

另外,我不认为你的前两条规则是必要的。

最后,您可以使用member / 2谓词在一行中实现它:

lockerof(C, L, V) :- member([C,V], L).