gpt4 book ai didi

使用 DCG 解析和生成多级列表结构

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

假设我将“a-list”称为零个或多个“a”的列表:

% as = [a,a,a]
as --> [].
as --> [a], as.
假设我想表示一个“b-list”,一个由零个或多个 a-list 组成的列表:
% bs := [ as,      as  ]
% bs = [ [a,a,a], [a] ]
bs --> [].
bs --> [A], { phrase(as,A) }, bs.
有没有更惯用的说法,不需要使用花括号从 DCG 中退出到“普通 Prolog”,只需调用 phrase()再次?

最佳答案

另一种选择,我认为这不是更好,因为它的可读性可能较低 , 是使用 lambda 表达式来定义 bs//0非终端。使用 Logtalk(您可以在大多数 Prolog 系统上运行)或 SWI-Prolog(通过 library(yall) ,它实现了 Logtalk lambda 表达式):

bs --> [].
bs --> [[A|As],As]>>phrase(as,A), bs.

lambda 表达式提供对语法规则隐式参数的访问。

示例调用:
?- phrase(bs, [[a],[a,a,a],[a,a]]).
true.

?- phrase(bs, [[a],[a,b,a],[a,a]]).
false.

关于使用 DCG 解析和生成多级列表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61096220/

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