dcg

    4热度

    1回答

    我正在处理prolog中的作业,该作业扫描数字列表,并应返回列表是否为有效的罗马数字和数字的十进制值。例) 1 ?- roman(N, ['I'], []). N = 1 true. 2 ?- 当我跑,我觉得应该工作程序,十进制值永远是对的,所以我猜我得到的合成属性部分的权利,但它总是返回数字列表FALSE的时候返回true。我还想补充说,如果存在超过3个Is,Xs或Cs时,它会中止。

    0热度

    1回答

    我正想通过这个例子上DCG integer(I) --> digit(D0), digits(D), { number_codes(I, [D0|D]) }. digits([D|T]) --> digit(D), !, digits(T). digits([]) --> []. digit(D) -->

    0热度

    3回答

    我有这个序言问题,我不能解决。我试图达到的目的是断言FACT A,当我输入时收回事实B:取得并断言事实B,并在输入时撤销事实A. 即: :- dynamic s/2. :- dynamic s/3. s(P0, s(V, NP)) --> v(P1, V), np(P2, NP), {P0 is P1*P2*0.35}. s(P0, s(V, NP, PP)) --> v(P1, V),

    2热度

    1回答

    我必须编写一些代码,使用Prolog的DCG形式将数字从英语翻译成法语(从1到999)。我是否必须写下两个单独的语法规则(一个是英文,一个是法文)? 互联网上的这段代码能帮助我吗? https://groups.google.com/forum/?fromgroups=#!topic/comp.lang.prolog/ZF8p5cs4q0U 请帮忙。

    0热度

    1回答

    : BoolExpr ::= BoolConj { "or" BoolConj }. BoolConj ::= BoolLit { "and" BoolLit }. BoolLit ::= [ "not" ] BoolPosLit. BoolPosLit ::= "true"| "false"| "(" BoolExpr ")". 我想写一个解析器DCG上面的语法。解析器简单地只需要接受

    1热度

    1回答

    我是Prolog的新手,我正在编写一个小程序,它会给出一个DCG的随机句子。 我以前的想法是用findall/3来列出所有可能的句子,然后使用random_member/2。 它的工作了一小会儿,直到语法越来越大,我开始变得因为递归的堆栈错误... 我当时以为的另一种方式:在给定的做出所有可能的方面一会儿,申请random_member获得下一个学期,递归调用这个相同的功能,直到我得到空的列表..

    0热度

    2回答

    我需要从那里有事实的描述文件读取,例如: id: GO:0000008 name: thioredoxin ,我需要建立一个事实与它一样的:"gene(0000008,thioredoxin)." ---增加--- 嗨,我一直在搜索信息,我发现DCG子句,显然DCG解决了这个问题,但我没有找到一个详细的例子。

    -1热度

    1回答

    我有一个上下文无关的语法句子解析器,它的功能正确,除了这样一个事实,即当您输入的知识库中不存在或不符合语法它将保持无限循环。我认为我简单的剪切语句可以解决这个问题,但我不确定在哪里放置它,因为一切都在彼此递归。

    -2热度

    1回答

    使用序言我想写一个谓词识别上下文无关文法如果输入列表匹配的CFG返回true。 输入的字母只包含a,b。 我试图匹配的CFG是 S-> TT T -> aTb | ab 我不太清楚如何实现这一点,主要的T规则。 s(S0,S):-t(S0,S),t(S1,S). t(S0,S):-S0 = a, t(S1,S), S1 = b; S0 = a, S1 = b. match([H|T]

    0热度

    2回答

    我试图定义a的数目为1的回文少于b的数量。 我似乎无法弄清楚如何得当写 please-->palindromes. palindromes-->[]. palindromes-->[a]. palindromes-->[b]. palindromes--> [b],palindromes,[b].