1

単純な 3 行のコードのように見えるものを実行しようとしています

insert(X,[],[X]).
insert(X,[H|T],Z):-X>=H,Z=[X,H|T].
insert(X,[H|T],Z):-X<H,insert(X,T,Z2),Z=[H|Z2].

しかし、何らかの理由でSWISHIDEoneなどの多くのオンライン コード コンパイラでコンパイルまたは実行することができません。問題は、「挿入」が認識された述語ではないことです。私はいくつかのグーグル検索を試みましたが、挿入するものは何もないようです。ありがとう!(プロローグ初心者でごめんなさい)

ERROR: /home/uJ0Y9U/prog:13:
    No permission to modify static procedure `true/0'
Warning: /home/uJ0Y9U/prog:15:
    Goal (directive) failed: user:main
ERROR: '$runtoplevel'/0: Undefined procedure: program/0
   Exception: (3) program ? EOF: exit

編集: ASCII 以外の文字に問題があったようです。ERROR: /home/F3Vzlp/prog:10:21: Syntax error: Operator expected ERROR: /home/F3Vzlp/prog:11:21: Syntax error: Operator expected のエラーが発生しました。

4

2 に答える 2

3
于 2015-08-27T01:58:00.727 に答える
3

プログラムはhttp://swish.swi-prolog.org/、swipl、gprolog などで動作します。後者を使用したトランスクリプトは次のとおりです。

$ gprolog --consult-file insert.prolog
GNU Prolog 1.4.4 (64 bits)
...
insert.prolog compiled, 3 lines read - 1234 bytes written, 16 ms
| ?- insert(1,[0,2,4], X).
insert(1,[0,2,4], X).

X = [1,0,2,4] ? ;
;

no
| ?- 

最初に表示されたエラー メッセージ (「true/0」に関する) は、どこかに無関係なテキストがあったことを示しています。

ところで、あなたのプログラムは少し改善することができます。(ヒント: Z は必要ありません。)

于 2015-08-27T02:54:03.077 に答える