我正在Amzi尝试下一个例子!序言:
member(apple, [apple, broccoli, crackers]).
答案是否定的。
?- member(apple, [apple, broccoli, crackers]).
no
我的版本有问题吗?如果我在swipl中尝试相同,那么它确实有用......
?- member(apple, [apple, broccoli, crackers]).
true .
Amzi! Prolog使用自己的Prolog实现吗?
答案 0 :(得分:1)
谓词member/2
未在官方ISO标准中指定,尽管通常由Prolog实现提供。但实施方式因系统而异。有些人将其作为内置谓词提供。其他人作为图书馆谓词。在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标准化并不是它的亮点之一。
答案 1 :(得分:0)
我使用过的Prolog的每个版本都与其他版本略有不同......很高兴看到现在有另外一个需要考虑的版本,ISO Prolog: - )
我认为这个链接有很好的信息:http://osprey.unisa.ac.za/phorum/read.php?674,173265,173265