私は Prolog を使い始めたばかりですが、一見単純な例で既に問題に遭遇しています。ここに私の.plファイルがあります:
hacker(P) :- mountaindew(P), doesntsleep(P).
hacker(P) :- writesgoodcode(P).
writesgoodcode(jeff).
次に、プログラムをswiplにロードした後、プロンプトで次の行を使用してテストします
writesgoodcode(jeff).
true と表示されると思ったのですが、次のエラーが表示されます。
?- hacker(jeff).
ERROR: hacker/1: Undefined procedure: mountaindew/1
Exception: (7) hacker(jeff) ?
このプログラムは正常に動作しますが、これは私の問題を解決しません:
hacker(P) :- writesgoodcode(P).
writesgoodcode(jeff).
$ swipl -s dumb.pl
% dumb.pl compiled 0.00 sec, 1,112 bytes
?- hacker(jeff).
true.
元のプログラムが機能しない理由を誰か説明できますか? 私の理解では、Prolog は、十分な情報がないため、最初のステートメントを「スキップ」し、次の行をチェックする必要があります。その 2 行目には十分な情報があるため、true と評価されるはずです。正しい方向への助けやポイントは素晴らしいでしょう。ありがとう。