6

私はプロローグに不慣れで、手動で入力するのではなく、すべてのクエリをファイルに保存したいと思っています。

私はこれらの事実を持っていますfacts.pl

likes(wallace, cheese).
likes(grommit, cheese).
likes(wendolene, sheep).

friend(X, Y) :- \+(X = Y), likes(X, Z), likes(Y, Z).

この質問の答えを読んだ後、私は次のコードを思いつきますqueries.pl

main :-
    write(likes(wallace, cheese)),
    halt.

:- initialization(['facts.pl']).
:- initialization(main).

ここで、ホールドかどうかを調べたいと思いlikes(wallace, cheese)ます。私が期待したのは、yesまたはのようなno出力ですが、実際の出力はlikes(wallace, cheese)

私はたくさんググってみました

X = likes(wallace, cheese), write(X).

X is likes(wallace, cheese), write(X).

X := likes(wallace, cheese), write(X).

しかし、それらのどれも機能しません。

それはあなたにとって本当に簡単な質問かもしれませんが、私は物事を正しくする方法についてはわかりません。

ところで、私はGNUProlog1.4.1を使用しています

4

1 に答える 1

5

各クエリに「タグ付け」する方法が必要だと思います。ここでは簡単な方法です。

query(likes(wallace, cheese)).
query(likes(mickey, whisky)).

% service predicates, check the library and use that if available
forall(X,Y) :- \+ (X, \+ Y).
writeln(T) :- write(T), nl.

main :-
    forall(query(Q), (Q -> writeln(yes:Q) ; writeln(no:Q))),
    halt.
于 2013-01-17T17:57:36.013 に答える