Prolog的句子可以含糊不清吗?

时间:2013-10-01 19:34:21

标签: prolog

Prolog句子是否可能含糊不清,你能告诉我一个例子吗?

我知道解析器的含义可能会产生两种不同的解析树......

1 个答案:

答案 0 :(得分:3)

不,Prolog在形式上并不含糊,但它提供了一种语法特征,可能导致难以理解的程序,即op / 3声明。正如您可以在文档中看到的那样

  

应用程序必须小心(重新)定义运算符,因为更改运算符可能会导致(其他)文件的解释不同。

就像C ++运算符在类固醇上重载一样,并且在编写DSL(特定于域的语言)时,定义新运算符(或重新定义一些已经知道的系统)的能力非常有价值。例如,请参阅库(clpfd)或lambda

历史相关性,它是点运算符。它的主要用途是作为子句终止符,但较旧的Prolog使用它作为“列表缺点”。 Here是我对此主题的回答。请注意初始声明

:- op(103, xfy, (.)).

允许紧凑的定义(例如)

seek_call(A.As, _.Ms, B.As, V) :-
    nonvar(A),
    A =.. F.FAs,
    seek_call(FAs, Ms, FBs, V),
    !, B =.. F.FBs.

它相当于

seek_call([A|As], [_|Ms], [B|As], V) :-
    nonvar(A),
    A =.. [F|FAs],
    seek_call(FAs, Ms, FBs, V),
    !, B =.. [F|FBs].