2017-06-03 1 views
2

SWI-Prologでリストコンストラクタを使用しようとしていますが、 'dict'という予期しないエラーが発生しています。例えばSWI-Prologでリストコンストラクタ(./2)を使用する方法

.(a, []) == [a]. 

ERROR: Type error: `dict' expected, found `a' (an atom) 
ERROR: In: 
ERROR: [11] throw(error(type_error(dict,a),_14808)) 
ERROR: [10] '$type_error'(dict,a) at /Applications/SWI-Prolog.app/Contents/swipl/boot/init.pl:3369 
ERROR: [9] '$dicts':'.'(a,[],_14874) at /Applications/SWI-Prolog.app/Contents/swipl/boot/dicts.pl:46 
ERROR: [8] '<meta-call>'(user:(...,...)) <foreign> 
ERROR: [7] <user> 
Exception: (9) '.'(a, [], _14200) ? 

は、誰も私がこの機能を構成するのに役立ちてもらえますか?

+5

のように書くことができ、従来の表記で|を使用することをお勧め。 – false

+3

... [SWI7](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/SWI7_and_ISO)より前のバージョンのSWIを使用してください[http://www.swi -prolog.org/download/stable?show=all)。 – false

+0

docs:[this](http://www.swi-prolog.org/pldoc/man?section=ext-list-motivation)および[this](http://www.swi-prolog.org/pldoc/ doc_for?オブジェクト= is_list/1)。 –

答えて

2

SWI-Prologの7.xのではなく、伝統的な./2 Prologのコンストラクタで、異なるリストのコンストラクタ、'[|]'/2を使用しています。

?- '[|]'(1,[]) == [1]. 
true. 

の変化は、特に辞書という点で、他の用途のために./2を解放するために意欲的でした、あなたがあなたの質問のために持っているエラーメッセージに暗示されています。

2

?- X = '[|]'(1,[0]). 
X = [1, 0]. 

この

?- X = [1|[0]]. 
X = [1, 0]. 
は、オプション `--traditional`でそれを起動
関連する問題