首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确调用DCG函数

正确调用DCG函数
EN

Stack Overflow用户
提问于 2013-12-05 04:54:10
回答 1查看 83关注 0票数 1

我有DCG格式,我想模拟这段代码:

代码语言:javascript
复制
 s --> [a].
 s --> s, s.

并以下列方式调用:

代码语言:javascript
复制
 ?- phrase(s, X).

我弥补了下面的代码,但是缺少了一些东西。

代码语言:javascript
复制
rule(s,[a]).
rule(s,[s,s]).

至于短语部分,我不知道如何将这些规则称为短语中的规则?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-05 08:21:45

DCG通常实现向规则中添加一对参数,以获得完成解析所需的快速列表处理,这是一种称为差异列表的基本技术的应用程序。您可以使用清单/1检查翻译:

代码语言:javascript
复制
?- [user].
|: s --> [a].
|: s --> s, s.
% user://1 compiled 0.04 sec, 4 clauses

?- listing(s).
s([a|A], A).
s(A, C) :-
    s(A, B),
    s(B, C).

短语/2 'just‘将令牌列表与第一个语法(隐藏)参数关联起来,并将空列表与第二个隐藏列表关联起来,这意味着整个令牌列表必须通过解析来使用。

由于您是在模拟DCG,所以您的任务应该减少到向代码中添加一个令牌列表。如果代码得到正确的实现(不容易做到正确),则模拟将能够解析和生成任何合法短语。在您的示例中,序列至少为1 a

不知道你如何解释你的规则,很难给出任何明智的暗示.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20391737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档