dcg

    8热度

    2回答

    我试图在Prolog中编写一个adaptive parser:换句话说,一个解析器可以在运行时修改它自己的解析规则。 为了做到这一点,我需要在运行时生成新的谓词,但我不确定这是否可能。是否可以写一个谓词,需要这样一个列表: generate_dcg_rule([A," is greater than ",B]). ...然后生成一个新的谓词是这样吗? expr(A," is greater t

    4热度

    3回答

    这是CFG: S -> T | V T -> UU U -> aUb | ab V -> aVb | aWb W -> bWa | ba 所以这会接受某种形式的: {a^n b^n a^m b^m | n,m >= 1} U {a^n b^m a^m b^n | n,m >= 1} 这里是我的代码有工作: in_lang([]). in_lang(L) :- mapS(

    0热度

    1回答

    我是新的prolog,我想编程一个计算器。为此,我需要编写一个谓词来处理给定的算术表达式,用通常的形式(中缀表单)编写,以便获取其前缀形式。 表达式的元素将被分组到具有3个元素的子列表中,其形式为[operator,term1,term2],使得这些项可以在其轮到列表中。应该被定义 称为解析谓词和工作像在本例中: ?-parse([1,+,2,*,3],PF). PF=[+,1,[*,2,3]]

    1热度

    1回答

    以两种方式之一定义可以描述副词的短语的最佳方式是什么? 你能不能说: adverb_phrase(N,进阶(N,高级)) - >路1 adverb_phrase(N,进阶(N,高级)) - >路2. 我试过这样做,但我得到的变量(如_G12345)在输出,看起来不正确。

    1热度

    1回答

    是否可以在DCG中创建如下的传递函数?或者将它与DCG规则结合起来? genx(A,B) :- gen(A,B). genx(A,C) :- gen(A,B), genx(B,C). gen(a,b). gen(b,c). 我会解释我想要做的正是: 如果我有这样的语法: noun_phrase(D,N) --> det(D), noun(N). noun(n(cat)) --> [ca

    1热度

    2回答

    节点的 例子是这样的: node(3, nil, 14). node(14, nil, 15). node(15, nil, 92). 我看到这里问类似的问题但是我的是不同的,因为我的节点参数有三个而不是两个值 例如它应该如何运行: ?- inOrder(3, X). X = [3, 14, 15, 35, 65, 89, 92] . 我当前的代码是: % the in-order

    0热度

    2回答

    我想在GNU Prolog中编写一个谓词来测试一个罗马数字是否存储为字符列表,并且格式正确。即,如果列表包含[i,c],[i,m]或[x,m],则它是无效的。例如,如果我通过[m,i,m],输出将是no。 我该怎么做呢?我知道成员/ 2的功能;有没有一种方法可以用来测试列表是否包含子列表?

    0热度

    1回答

    我正在尝试为命令接口编写DCG。这个想法是读取一个输入字符串,将其拆分为空格,然后将得到的令牌列表交给DCG,以将其解析为命令和参数。解析的结果应该是我可以用=..来构建要调用的目标的术语列表。但是,SWI-Prolog(ver。7.2.3)中的字符串类型情况让我感到非常困惑。 SWI-Prolog包含一个basic DCG functionality的库,包括目标integer//1,它应该解析

    0热度

    1回答

    我试图找到在二进制树中均匀放置的所有元素,并将它们放置在列表中。 这是我的尝试: concat([],L,L). concat([H|T], L, [L|LRez]) :- concat(T,L,LRez). find(R, t(_, R, _), 0). find(X, t(S, R, D),P) :- X < R, find(X, S, P1), P is P1+1. find(X,

    1热度

    1回答

    我想为语言a^n b^n做一个解析树。 下面是我尝试过的,但它只是变成了真正的没有引用分析树。 %% a^n, b^n. ex) s([a,a,b,b],[]). = true s --> a,s,b. s --> []. s(ab(S)) --> a,s(S),s. s([]) --> []. 例如,我想打印ab(ab([]))如果我键入s(T,[a,a,b,b],[]). 请