のコストを避けたいのでappend/3
、差分/オープン リストを使用します。
ただし、開いたリストの問題はmember/2
、要素を末尾に追加することによって開いたリストに反応することです。例えば:
?- L=[a|_],member(b,L).
L = [a, b|_G1196] ;
L = [a, _G1195, b|_G1199] ;
L = [a, _G1195, _G1198, b|_G1202] ;
L = [a, _G1195, _G1198, _G1201, b|_G1205] ;
L = [a, _G1195, _G1198, _G1201, _G1204, b|_G1208] ;
L = [a, _G1195, _G1198, _G1201, _G1204, _G1207, b|_G1211]
開いているリストには無制限の「テール」があり、member/2
関数はこのテール/ホール (変数) を member の最初の引数と統合するため、これは正しい動作です。
ただし、開いているリストに特定の要素と等しい要素があるかどうかを確認できる方法を探しています。これどうやってするの?