私は 'the art of prolog'の本を読んでいて、 'ListOfIntegersの合計である場合に保持する関係の合計(ListOfIntegers、Sum)を定義する任意の補助述語 '.Iは、この解決策を思いついた:プロローグ内のリストの合計
sum([],Sum).
sum([0|Xs], Sum):-sum(Xs, Sum).
sum([s(X)|Xs], Sum):-sum([X|Xs],s(Sum)).
これは私が望むように正確に動作しません。
私はXがs(s(s(s(s(s(0))))))
であることを期待していた
?- sum([s(s(0)),s(0),s(s(s(0)))],X).
true ;
false.
私はこの問題は、私が最初に「反復」に0に合計を「初期化」しなければならないということですが、それは残念ながら非常に手続きとなるだろうと思いました私はその仕事をするためにプロローグにはあまり適していません。 アイデアや提案はありますか?
私はそのように私の問題に取り組むことができたとは決して考えなかった...ありがとう! – kaiseroskilo
これは、別の言語からインスピレーションを得た最初のPrologの質問ではありません。私はErlangが最近Prologプログラマーを台無しにしてしまったと思います。 Erlangでは、Peanoなしでできます:sum([]) - > 0; sum([X | Y]) - > X + sum(Y)である。そして、左右の宣言的読書はぼやけており、 ' - >'は論理的に混乱している。 –
Prolog IIは ':-'の代わりに' - > 'を持っていました。これは1980年頃です。書き直しのアスペクトを強調することを意図していました。 Erlangは1987年頃です。 – false