2

私は初心者のプロローグコースを受講しています。私たちはswi-prologを使用することになっています、これが私の言うことです

% library(swi_hooks) compiled into pce_swi_hooks 0.00 sec, 3,856 bytes
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.10.4)

算術述語add(X、Y、Z)を開発するように求められます。後継のs(X)[= X+1]ファンクターを使用します。この述語は私のマシンで次のエラーで失敗します:

ERROR: toplevel: Undefined procedure: s/1 (DWIM could not correct goal)

誰かが解決策を持っていますか?たぶん、swiplをダウングレードする必要がありますか?

ありがとう!

4

2 に答える 2

2

あなたのSWI-Prologは問題ありませんが、割り当てを誤解しました。通常の数値の代わりにPeano表現を使用して、add / 3の定義を記述する必要があります。たとえば、2はs(s(0))になります。同様の質問を検索することができます。たとえば、私が答えたのは、あなたが直面しているのとまったく同じコンテキストでの実際のPrologの実行を理解するのに役立ちます。

于 2013-03-26T10:53:32.990 に答える
1

s/1は実際の述語ではないため、インタプリタのバージョンをダウングレードする必要はありません(そのため、このエラーが発生します)。s/1すでにご存知のように、単に「後継者」の略であり、再帰的な方法で数値を表すために使用されます。

0Prologの自然数は、定数記号とアリティ1の後継関数の2つの構成要素から構築されます。sその後、すべての自然数は再帰的にとして与えられ0, s(0), s(s(0)), s(s(s(0))), ...ます。s n(0)は整数nを表すという規則を採用します。つまり、後継関数の n個のアプリケーションは次のようになります。0

[Sterling L.、Shaphiro E。、「The Art of Prolog」、第2版。-MITプレス]

この関連する質問はおもしろいと思います。

于 2013-03-26T11:00:18.770 に答える