私はプロローグを学ぶのが初めてで、次のような手順があるかどうか知りたいです
father("Nic","Adam").
そして、これに新しい価値を追加する関数を書きたい
father("Nic","Adam","something"..)
これどうやってするの?リストを使用していますか?または何?
簡単な答え:あなたはそれをしたくありません。
より長い答え:father/2
述語には特定の意味があります。つまり、 forfather(X,Y)
X
は の父ですY
。father/3
述語はまったく別のものです。その 3 番目の引数で何を達成したいですか? 通常、述語から物事を導き出すfather/2
、または述語をfather/3
引数に解決する追加の規則を使用します。
主な疑問は残ります: 3 番目の引数の目的は何ですか? father/2
たとえば、対応する述語の存在に基づいて、特定の特定の 3 番目の引数に対して解決策を機能させたい場合は、対応する事実father(X, Y, 'something') :- father(X,Y)
があれば成功します。father/2
PS: 専門用語を学びましょう。Prolog では、手続きについては言及せず、関数についても記述しません。代わりに、述語、事実、規則などがあります。
PPS: どの Prolog 実装を使用しているかはわかりませんが、'something'
の代わりに使用することをお勧めします"something"
。後者は通常、文字列ではなく、文字コードのリストを作成します。
?- X = 'some'.
X = some.
?- X = "some".
X = [115, 111, 109, 101].
簡単に書く
father(nic, adam).
述語としてすでに定義されています。それは事実を述べているようなものです: であると宣言するfather(nic, adam)
とtrue
、これらの期待される結果で以下を実行できます:
?- father(nic, adam).
Yes
?- father(nic, X).
X = adam