gpt4 book ai didi

prolog - DCG:将余数分配给 DCG {} 代码中的变量

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

这个答案:Very basic dcg prolog syntax对我有一点帮助,但 [X] 只能得到下一个字符,我想要整个辣酱 Jade 米饼馅,继续阅读!

我正在使用 GNU Prolog 编写一个命令选项解析器,但我卡在了一个 DCG 点上。我有这个语法规则,例如寻找“foo --as=json”,但我不知道如何得到“anything”的结果,代码:

as_opt --> "--as=", anything, { c( as_opt )}, !.
anything --> [], {c(anything_match)}.

gprolog 的扩展是:

as_opt([45, 45, 97, 115, 61|A], B) :-
anything(A, C),
c(as_opt), !,
C = B.

anything(A, B) :-
c(anything_match), !,
A = B.

“c()”谓词很简单,仅用于跟踪使用 format() 执行的规则到标准输出,这样我就可以看到它运行时发生了什么。如果我手动编写代码,我会这样做:

%% for completeness here!
c(Msg) :- format("Processed ~w~n", [Msg]).

as_opt([45, 45, 97, 115, 61|A], B) :-
anything(A, C),
c(as_opt), !,
C = B,
{ g_assign( gvValue, B )}. %% just for example

回到原来的 DCG:

as_opt --> "--as=", anything, { c( as_opt ), gassign( gvValue, ??? )}, !.

那么“???”在哪里?是。有没有可能……一定有。我将重新阅读 gprolog 规则,了解它如何再次扩展 DCG 规则,以防我自己(捂脸),但与此同时,我们非常欢迎任何帮助。

谢谢,肖恩。

最佳答案

您要求的是最简单的 DCG 非终结符之一,它描述了任何列表:

list --> [].
list --> [_], list.

要实际访问所描述的列表,您需要引入一个参数:

list([])    --> [].
list([L|Ls) --> [L], list(Ls)

你可以这样使用它:

as_opt(Option) --> "--as=", list(Option).

关于prolog - DCG:将余数分配给 DCG {} 代码中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18657304/

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