Prologでエラーチェックを追加する方法を知りたいと思います。Prologエラーの引数
listlen([],0).
listlen([_|T],N) :-
listlen(T,X),
N is X+1.
それが起こるとき、「第一引数はリストである必要があります」のように、私はエラーをプリントアウトする方法を:たとえば 私はリストがどのくらいありますプログラムがありますか?
Prologでエラーチェックを追加する方法を知りたいと思います。Prologエラーの引数
listlen([],0).
listlen([_|T],N) :-
listlen(T,X),
N is X+1.
それが起こるとき、「第一引数はリストである必要があります」のように、私はエラーをプリントアウトする方法を:たとえば 私はリストがどのくらいありますプログラムがありますか?
SWI-PrologはISO-compliant exception handlingなので、実際にはエラーas defined in the standardがスローされます。
?- throw(error(type_error(list, foo), context(foo/0, 'Must be a list'))).
ERROR: foo/0: Type error: `list' expected, found `foo' (an atom) (Must be a list)
これは、入力/使用が難しいだけでなく、実装にも依存します。代わりに、あなたは(とすべきである)を提供library(error)を、使用することができますmust_be/2
predicate(悲しいことに、あなたが探しているかわからない場合はSWI-Prologのウェブサイト上でこれを見つけることは非常に困難である):
?- must_be(list, [foo]).
true.
?- must_be(list, foo).
ERROR: Type error: `list' expected, found `foo' (an atom)
例外処理をサポートする他のPrologの実装は、非常によく似た機能を提供すると私は推測しています。
この場合、エラーが発生しない理由があります。この状況でのさまざまなシステムの動作については、[この比較](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/length)を参照してください。 – false