2

SWI Prolog に「nth0」クエリを入力すると、結果は次のようになります。

?- nth0(N,X,a).
N = 0,
X = [a|_G282] ;
N = 1,
X = [_G281, a|_G285] ;
N = 2,
X = [_G281, _G284, a|_G288] ;
... etc

ただし、SWI マニュアルには次のように記載されています。

Errors
  type_error(integer, Index) if Index is not an integer or unbound.

したがって、このテキストに対する私の理解が正しければ (?)、以前の結果ではなくエラーが発生するはずです。

また、ISO規格を考慮した正しい振る舞いはどれなのか気になります。

(stack-overflow では参照用の質問が許可されていないことはわかっているので、標準へのリンクは求めませんが、次のように尋ねてもルールを破らないことを願っています: ISO 標準は公開されていますか? そうでない場合は、同等の RFC?)。

4

2 に答える 2

4

これを正しく読むと、

nth0( ?Index , ?List , ?Elem )

「...インデックスが整数またはバインドされていない場合。」

この例では、Indexはバインドされていません。

?- nth0(N, L, E).
N = 0,
L = [E|_G1103] ;
N = 1,
L = [_G1102, E|_G1106] ;
N = 2,
L = [_G1102, _G1105, E|_G1109] .

では、マニュアルを読み間違えているのでしょうか?

念のため: マニュアルは「... if Index is not( or( an integer, unbound ) )」と理解する必要があります。Indexがバインドされていないときに行うことは、 Indexが 0 以上の有効なリストの列挙を開始することです。

于 2015-05-29T13:11:27.560 に答える