1

ロッカーとコードを関連付けようとしています。これは私がこれまでに持っているものです。

    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

私は何を間違っていて、どうすればこの問題を解決できますか?

4

1 に答える 1

0

リストの末尾もスキャンする必要があります。再帰を使用します。

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

それは、「[C,V] がリストの末尾にある場合、それはリスト自体にもある」ということです。

また、最初の 2 つのルールは必要ないと思います。

最後に、member/2 述語を使用して 1 行で実装できます。

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