某些关键字/谓词的定义

时间:2014-01-07 06:24:58

标签: prolog

有人可以在Prolog中给我一些关键字/谓词的定义吗?

  • 分析时
  • bagof
  • findall
  • ^谓词
  • @谓词

例如bagof(X, Y^place(X, Y , japan), Xs)A<@BA>@B

有人可以告诉我这些谓词和任何其他可能非常有用的含义,我对Prolog很感兴趣但是由于我的工作,我不能给Prolog太多的时间。我对Prolog有很好的了解,但我似乎无法找出某些词语的含义。

2 个答案:

答案 0 :(得分:2)

您需要的所有内容似乎都有详细记录,例如GNU-Prolog:

parse_time in SWI-Prolog documentation

答案 1 :(得分: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].

<小时/> 的 @

此符号的最常见用法是比较谓词@</2@>/2等。A<@BA>@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.

@比较谓词可以非常方便。 :)