0

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

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

答案是否定的。

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

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

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

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

4

2 回答 2

1

member/2尽管 Prolog 实现经常提供谓词,但官方 ISO 标准中并未指定谓词。但是实现方式因系统而异。有些人将其作为内置谓词提供。其他作为库谓词。在 SWI-Prolog 的特定情况下,假设默认配置,member/2谓词在模块中定义,library(lists)当调用其导出的谓词之一时自动加载。默认情况下,自动加载是静默的,这通常会导致用户认为他们正在调用内置谓词。在Amzi的情况下!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 标准化并不是它的亮点之一。

于 2013-10-08T21:14:52.747 回答
0

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

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

于 2013-10-08T20:55:17.793 回答