1

以下にプロローグルールがあります

schedule(mary,[ma424,ma387,eng301]).

そして私は述語を持っています

taking(X,Y):- schedule(X, [Y | L]). 

そして、彼女が受けているクラスを入力して把握しようとすると

taking(mary,Y).

私は y=ma424 を得ています

彼女のすべてのクラスを出力しないのはなぜですか

私もこれと他のバリエーションを試しました

taking(X,Y):- schedule(X,[X|L]),schedule(Y, [Y | L]),schedule(Y,L),X\=Y,X\=L.

しかし、それは機能しません

すべてのクラスを印刷して、ルールが定義されている方法を取得するにはどうすればよいですか

4

1 に答える 1

3

これは、述語の定義方法によるものです。

taking(X,Y) :-        % X takes class Y if...
    schedule(X,       % in the schedule for X,
             [Y|L]).  % Y is the first element.

指示しなければ、プログラムは魔法のようにリストを検索するLことはありません。これを行うには、次のmember/2述語を使用します。

taking(Student, Class) :-
    schedule(Student, Classes),
    member(Class, Classes).
于 2011-04-18T07:00:59.130 に答える