gpt4 book ai didi

prolog - 非常基本的 dcg prolog 语法

转载 作者:行者123 更新时间:2023-12-02 00:14:34 25 4
gpt4 key购买 nike

我正在尝试理解序言和定句语法,但我很难理解它们。

我真的很想了解如何使用 dcg 语法...

这里我有两个例子:

第一个实际上是这个论坛上另一个问题的代码,但还有一个问题:

代码如下所示:

s --> first, operator, second.
first --> [X].
operator --> ['+'].
second --> [X].

当 Prolog 被问及这个时,它返回真/假,但我一生都无法弄清楚如何实际修改它以“绑定(bind)”值,所以如果被问到 s(X, [2,+,2] ,[])。它会返回 first 的值,所以不是返回 true 而是说 X = 2

无论如何回到实际问题。我在普通序言中有一些规则,这就是其中之一;它实际上并没有做任何事情,只是作为一个例子。
do(X, Y, [H|T], Sum):-
H == 1, %check if H is 1
X = H,
Y = T,
Additional is H+5,
Sum is Additional+Additional.

基本上,我在问是否有人可以将其翻译成 DCG,以便我可以尝试理解 DCG 的基本语法!我试过阅读一些教程,但我觉得我还没有变得更聪明......

最佳答案

直流电:
foo(A1, A2, A3, ... , An) --> 酒吧。

序言:
foo(A1, A2, A3, ... , An, X, Y) :- bar(X,Y)

所以,s应改为:

s(X) --> first(X), operator, second.
first(X) --> [X].
operator --> ['+'].
second --> [X].

当然,返回实际结果可能会更好;为此,您应该将序言代码封装在 DCG 子句中,该子句由 {} 完成。 :
s(Z) --> first(X), operator, second(Y), {Z is X+Y}.
first(X) --> [X].
operator --> ['+'].
second(X) --> [X].

(当然,如果你有更多的操作符,prolog 代码就不会那么简单了)。

关于 do/4谓词,它应该是这样的:
do(X,Y,[H|T],Sum) -->
{H == 1, %check if H is 1
X = H,
Y = T,
Additional is H+5,
Sum is Additional+Additional}.

但我不明白你为什么想要那个。

最后一个提示:建议使用 phrase/3 而不是在 DCG 谓词中添加最后两个参数。

关于prolog - 非常基本的 dcg prolog 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13902867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com