gpt4 book ai didi

prolog - 您如何将 DCG 翻译成 PROLOG 中的普通定语子句?

转载 作者:行者123 更新时间:2023-12-01 12:58:16 25 4
gpt4 key购买 nike

您如何将以下 DCG 翻译成 PROLOG 的正常定从句?

expr_regular --> cor_ini,numero,guion,numero,cor_fin.
cor_ini --> ['['].
numero --> ['0'];['1'];['2'];['3'];['4'];['5'];['6'];['7'];['8'];['9'].
cor_fin --> [']'].
guion --> ['-'].

编辑:我想将 DCG 翻译成普通的 PROLOG 子句,因为我不能在同一代码中同时使用 DCG 和普通子句(在我的例子中)。我有这两段代码:

第 1 部分:

traducir(Xs, Ys) :- maplist(traduccion, Xs, Ys).
traduccion('^',comeza_por).
traduccion('[',inicio_rango).
traduccion('0',cero).
traduccion('-',a).
traduccion('9',nove).
traduccion(']',fin_rango).

如何使用它的一个例子是:

?- traducir(['[','0','-','9',']'],[]).
true .

和 Piece2:

 traducir--> cor_ini,numero,guion,numero,cor_fin.
cor_ini --> ['['].
numero --> ['0'];['1'];['2'];['3'];['4'];['5'];['6'];['7'];['8'];['9'].
cor_fin --> [']'].
guion --> ['-'].

如何使用它的一个例子是:

traducir(['^','[','0','-','9',']'],X).
X = [comeza_por, inicio_rango, cero, a, nove, fin_rango].

我想将两个代码合二为一来测试 traducir 是否写得好(如果它遵循 DCG)并将您输入的内容翻译成文本,因此最终程序应该能够执行以下操作:

?- traducir(['^','[','0','-','9',']'],X).
X = [comeza_por, inicio_rango, cero, a, nove, fin_rango].
?- traducir(['[','0','-','9',']'],[]).
true .

最佳答案

在 SWI-Prolog 中,您可以直接在 上使用 listing/1 :

?- forall(member(NT,[expr_regular//0,cor_ini//0,numero//0,cor_fin//0,guion//0]),
listing(NT)).
expr_regular(A, F) :-
cor_ini(A, B),
numero(B, C),
guion(C, D),
numero(D, E),
cor_fin(E, F).

cor_ini(['['|A], A).

numero(A, B) :-
( A=['0'|B]
; A=['1'|B]
; A=['2'|B]
; A=['3'|B]
; A=['4'|B]
; A=['5'|B]
; A=['6'|B]
; A=['7'|B]
; A=['8'|B]
; A=['9'|B]
).

cor_fin([']'|A], A).

guion([-|A], A).

true.

就是这样!您可能会从相关问题“Is there a way or an algorithm to convert DCG into normal definite clauses in Prolog?”的答案中获益。

关于prolog - 您如何将 DCG 翻译成 PROLOG 中的普通定语子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8376763/

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