

SWI-Prolog に於いて、以下の質問の実行について、質問します。

[code]

    ?- length(L,2),findall(A,member(A,L),L2),L=[a,b].
    L = [a, b],
    L2 = [_G89263, _G89260].
    
[/code]

ここで、最初に生成される length/2 の二つの変数は匿名変数ではないはずなのに、  
findall/3 の中のmember/2の中のAとfindall/3の第一引数のAはリンクされずに  
別の変数が生成されてしまうのは何故でしょう。SWI-Prolog以外の処理系でも同じ  
結果を得ました。何らかの仕様の原典があるのでしょうか。


CC BY-SA 3.0
2015-08-20T11:56:26.370
14673
2020-09-04T07:06:55.883
5175
question
prolog
findall/3の中でのへ


Prologは理想的な宣言言語では無いので、動作した順番が存在しています。  
L2が実行された時点では、まだLの中はユニファイされていないので、この動作が正常な答えになります。


CC BY-SA 3.0
2018-02-23T07:47:42.940
41955
2018-02-23T07:47:42.940
27517
14673
answer