我的Prolog版本似乎不知道成员



我正在 Amzi 中尝试下一个示例!序言:

member(apple, [apple, broccoli, crackers]).

答案是否定的。

?- member(apple, [apple, broccoli, crackers]).
no

我的版本有问题吗?如果我在 swipl 中尝试相同的方法,那么它确实有效......

?- member(apple, [apple, broccoli, crackers]).
true .

阿姆齐!Prolog使用自己的Prolog实现?

member/2在官方ISO标准中没有指定,尽管Prolog实现通常提供。但实现因系统而异。有些将其作为内置谓词提供。其他作为库谓词。在SWI-Prolog的特定情况下,假设默认配置,member/2谓词在模块library(lists)中定义,当调用其导出的谓词之一时会自动加载。默认情况下,自动加载是无提示的,这通常会导致用户认为他们正在调用内置谓词。在阿姆齐的情况下!Prolog,似乎member/2谓词不是内置的,但您可以自己轻松定义它。为了检查给定谓词是否是内置谓词,通常可以使用标准谓词predicate_property/2谓词。例如,使用SWI-Prolog,您可以获得member/2

?- predicate_property(member(_,_), Property).
Property = interpreted ;
Property = visible ;
Property = imported_from(lists) ;
Property = file('/Users/pmoura/lib/swipl-6.5.2/library/lists.pl') ;
Property = line_count(106) ;
Property = nodebug ;
Property = number_of_clauses(1) ;
Property = number_of_rules(1) ;
false.

但遗憾的是,并非所有系统都提供标准predicate_property/2谓词。不幸的是,Prolog标准化并不是它的亮点之一。

我使用过的每个版本的Prolog都与其他版本略有不同......很高兴看到现在还有另一个需要考虑,ISO Prolog :-(

我认为这个链接有很好的信息:http://osprey.unisa.ac.za/phorum/read.php?674,173265,173265

相关内容

最新更新