ISO Prologで個別の変数のリストをテストするための最もコンパクトで標準的な方法は何ですか? このメタ論理述語を と呼びましょうis_varset/1
。
したがって、引数がすべて異なる変数のリストである場合、成功するはずです。[]
リストの末尾には常に a が含まれることに注意してください。変数が最後にある場合、これを部分リストと呼びます(したがって、リストではありません)。また、非変数項が[]
変数でも変数でもない接尾辞として現れる場合、これは部分的なリストでもリストでもありません。
部分リストでもリストでもない用語の注目すべき特殊なケースは、無限リストです。それらには少なくとも 2 つの同一の接尾辞が含まれており、実際にはそのような接尾辞が無数にあります。無限リストは標準の範囲外です — それらを作成しようとするすべての試みは、結果が未定義の STO 統合をもたらします。それでも、一部のシステムはそれらをサポートしているため、理想的にはそれらの無限リストはis_varset/1
有限に失敗するはずです。
?- is_varset([A|nonlist]).
false.
?- is_varset([A,B]), is_varset([B,A]).
true.
?- is_varset([A,B,A]).
false.
?- is_varset([A,f(B)]).
false.
?- is_varset([A|_]).
false.
?- L = [_|L], is_varset(L). % may loop, should rather terminate
false.
これは、Cor.2:2012 を含む ISO/IEC 13211-1:1995の組み込みの概要です。