有人能给我一些关于Prolog的关键字/谓词的定义吗?某些关键字/谓词的定义
- 分析时
bagof
findall
- 的
^
谓词 - 的
@
谓词
例如,bagof(X, Y^place(X, Y , japan), Xs)
, A<@B
, A>@B
。
有人可以给我这些谓词的含义和任何其他可能相当有用的意义,我对Prolog很有兴趣,但由于我的工作,我无法承担给Prolog太多的时间。我对Prolog有相当的了解,但是我似乎无法找出某些词的含义。
有人能给我一些关于Prolog的关键字/谓词的定义吗?某些关键字/谓词的定义
bagof
findall
^
谓词@
例如,bagof(X, Y^place(X, Y , japan), Xs)
, A<@B
, A>@B
。
有人可以给我这些谓词的含义和任何其他可能相当有用的意义,我对Prolog很有兴趣,但由于我的工作,我无法承担给Prolog太多的时间。我对Prolog有相当的了解,但是我似乎无法找出某些词的含义。
所有你需要似乎是有据可查的,例如用于GNU-序言:
(^)/2
)请参阅@jkbkot为完整描述提供的链接。截至非常简短,非常窄的例子方式:
parse_time
(注意拼写 - SWI Prolog的谓词)
?- parse_time('Fri, 08 Dec 2006 15:29:44 GMT', Format, Time).
Format = rfc_1123,
Time = 1165591784.0.
?- parse_time('2013-10-12', Format, Time).
Format = iso_8601,
Time = 1381536000.0.
利用这一点,你可以得到的日期/时间的数值表示和数字管理。日期字符串是必需的输入参数(必须实例化)。所以,不幸的是,parse_time
对来回转换格式没有用处。
?- parse_time(D, iso_8601, 1381536000.0).
ERROR: atom_codes/2: Arguments are not sufficiently instantiated
bagof
和
^
likes(a,b).
likes(a,c).
likes(a,d).
likes(b,c).
likes(b,e).
?- bagof(X, likes(X,Y), L).
Y = b,
L = [a] ;
Y = c,
L = [a, b] ;
Y = d,
L = [a] ;
Y = e,
L = [b].
?- bagof(X, Y^likes(X,Y), L).
L = [a, a, a, b, b]
?- bagof(X-Y, likes(X,Y), L).
L = [a-b, a-c, a-d, b-c, b-e].
?- setof(X, Y^likes(X,Y), L). % provides the unique, sorted results
L = [a, b]
?- setof(X-Y, likes(X,Y), L).
L = [a-b, a-c, a-d, b-c, b-e].
findall
likes(a,b).
likes(a,c).
likes(a,d).
likes(b,c).
likes(b,e).
?- findall(X, likes(X,Y), L).
L = [a, a, a, b, b].
?- findall(X-Y, likes(X,Y), L).
L = [a-b, a-c, a-d, b-c, b-e].
@
最常见的用途该符号的是在比较谓词的A<@B
@</2
,@>/2
等实施例的表达式和A>@B
是Prolog的语法错误。
?- 1 < 2.
true.
?- X=1, Y=2, X+Y<5.
true.
?- a < b.
ERROR: </2: Arithmetic: `a/0' is not a function
?- a @< b.
true.
?- a @> b.
false.
?- a < 1.
false.
?- [2,3,4] @< [2,3,5].
true.
?- [2,3,4] @< [2,3,3].
false.
?- foo(a,X) @< foo(b,Y).
true.
?- foo(b,X) @< foo(a,Y).
false.
使用@<
你不一定必须使用parse_time
,如果你想,只要他们的时间顺序如下ASCII字典顺序比较日期/时间字符串:
?- '2013-11-09' @< '2013-12-01'.
true.
?- '2013-01-12' @< '2012-12-12'.
false.
的@
比较谓词非常方便。 :)
参见'(^)/ 2':http://stackoverflow.com/questions/19931801/what-is-the-prolog-operator/19931970#19931970 – false