1

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

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

当我输入:

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

它给了我 a 的价值,所以我得到:

    V = 1

但是当我输入:

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

我得到一个“不”,但我希望输出是:

    V =2

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

4

1 回答 1

0

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

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

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

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

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

lockerof(C, L, V) :- member([C,V], L).
于 2012-11-27T00:00:28.350 回答