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],[]). 請