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].