3

私はプロローグを学ぶのが初めてで、次のような手順があるかどうか知りたいです

father("Nic","Adam").  

そして、これに新しい価値を追加する関数を書きたい

father("Nic","Adam","something"..) 

これどうやってするの?リストを使用していますか?または何?

4

2 に答える 2

1

簡単な答え:あなたはそれをしたくありません。

より長い答え:father/2述語には特定の意味があります。つまり、 forfather(X,Y) Xは の父ですYfather/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].
于 2010-03-24T12:59:11.697 に答える
0

簡単に書く

father(nic, adam). 

述語としてすでに定義されています。それは事実を述べているようなものです: であると宣言するfather(nic, adam)true、これらの期待される結果で以下を実行できます:

?- father(nic, adam).
Yes

?- father(nic, X).
X = adam
于 2010-03-24T12:56:30.763 に答える