我如何使用这个 Prolog 谓词来接收结果?无法弄清楚输入

How do I use this Prolog predicate so as to receive the result? Cannot figure out input

我们的教科书给了我们 Prolog 中数学方程式的构造器示例:

math(Result) --> number(Number1), operator(Operator), number(Number2), { Result = [Number1, Operator, Number2] }.

operator('+') --> ['+'].

number('number') --> ['NUMBER'].

不过,我对 Prolog 还很陌生,我不知道如何使用这个例子来获得输出。我的印象是它使用 Result 重组输入并输出以供使用。

我尝试过的唯一不会导致错误的输入是 math('number', '+', 'number').,但它总是输出 false,我不知道为什么。此外,它不应该重组它并在 Result 中也给我结果吗?

我应该在这里输入什么?

这个例子是一个DCG。您应该使用 phrase/2 接口谓词来访问 DCG。

要找出 DCG 描述的内容,请从最一般的查询开始,将非终结符 math(R) 与第一个参数描述的列表 Ls 相关联:

?- phrase(math(R), Ls).

根据您得到的答案(非常简单的练习!),您会注意到 R 可能不是您想要的。提示:查找 (=..)/2.

请特别注意,您在这里不需要 "inputting" 任何东西:一个 DCG 描述 一个列表。列表 可以 指定,但 不需要 给出:变量也可以!考虑任意项之间的关系。