我如何使用这个 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 描述 一个列表。列表 可以 指定,但 不需要 给出:变量也可以!考虑任意项之间的关系。
我们的教科书给了我们 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 描述 一个列表。列表 可以 指定,但 不需要 给出:变量也可以!考虑任意项之间的关系。