Prolog 上下文相关语法序言

Prolog 上下文相关语法序言,prolog,dcg,Prolog,Dcg,我正在尝试用Prolog编写一个DCG语法,它可以做到: kkk ... k --> N * (k) 其中k可以是任何内容(例如“a”、“ab”、“abc”) 左边是我想要消费的东西,右边是我想要产生的东西 这在DCG中是可能的吗 我试着用一封信来做最简单的事情,就像这样: s(N) --> a(N). a(0) --> []. a(R) --> [R], [*], [a]. a(M) --> [a], a(N), {M is N + 1}. eval(X) :

我正在尝试用Prolog编写一个DCG语法,它可以做到:

kkk ... k --> N * (k)
其中
k
可以是任何内容(例如“a”、“ab”、“abc”)

左边是我想要消费的东西,右边是我想要产生的东西

这在DCG中是可能的吗

我试着用一封信来做最简单的事情,就像这样:

s(N) --> a(N).
a(0) --> [].
a(R) --> [R], [*], [a].
a(M) --> [a], a(N), {M is N + 1}.

eval(X) :-
   s(_, X, []).
但我不确定这是正确的方法


谢谢你的帮助。

Afaik,这可能需要一个上下文敏感的语法,它不那么简单。是的,我知道(这就是为什么我把它放在标题中),但是我应该如何在prolog中做到这一点?你希望
kkkk mmm
的结果是什么?您是否只想识别一个整数、单个重复序列?顺便说一句,对于DCG,您应该使用
phrase
,因此:
eval(X,R*(K)):-phrase(s(R,K),X)。
您的DCG不仅提供计数,还提供重复的子序列
K
。我希望它是
kkkk mmm=>5*k3*m
,但我知道,根据我的要求,它可能是
kkkk-mmm=>1*kkkk-mmm
,这不是真正的因式分解。我正在尝试分解结构信息理论序列,这就是它有趣的地方。预期结果的逻辑规则有点模糊,所以很难回答这个问题。是否允许“非系数化”结果?“非系数化”到底意味着什么?
kkkmmmkkmm=>2*kkkmm
是否未进行系数化?或者它需要看起来像
3*k3*m3*k3*m
?或者
2*(3*k3*m)