首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Prolog中不使用cut进行语法分析?

在Prolog中不使用cut进行语法分析?
EN

Stack Overflow用户
提问于 2011-06-15 21:37:30
回答 3查看 1.2K关注 0票数 18

我在Prolog中找到了这个解析lisp的很好的代码片段(来自here):

代码语言:javascript
复制
ws --> [W], { code_type(W, space) }, ws.
ws --> [].

parse(String, Expr) :- phrase(expressions(Expr), String).

expressions([E|Es]) -->
    ws, expression(E), ws,
    !, % single solution: longest input match
    expressions(Es).
expressions([]) --> [].

% A number N is represented as n(N), a symbol S as s(S).

expression(s(A))         --> symbol(Cs), { atom_codes(A, Cs) }.
expression(n(N))         --> number(Cs), { number_codes(N, Cs) }.
expression(List)         --> "(", expressions(List), ")".
expression([s(quote),Q]) --> "'", expression(Q).

number([D|Ds]) --> digit(D), number(Ds).
number([D])    --> digit(D).

digit(D) --> [D], { code_type(D, digit) }.

symbol([A|As]) -->
    [A],
    { memberchk(A, "+/-*><=") ; code_type(A, alpha) },
    symbolr(As).

symbolr([A|As]) -->
    [A],
    { memberchk(A, "+/-*><=") ; code_type(A, alnum) },
    symbolr(As).
symbolr([]) --> [].

但是,表达式使用了cut。我假设这是为了提高效率。有没有可能编写这样的代码,让它在没有cut的情况下高效地工作?

也会对涉及水星的软削减/承诺选择的感兴趣的答案。

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

https://stackoverflow.com/questions/6358556

复制
相关文章

相似问题

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