gpt4 book ai didi

prolog - 我正在尝试使用 DCG 创建一种语言 a^n b^n-1 c^n-2 但无法使 succ(0) 处理 n

转载 作者:行者123 更新时间:2023-12-01 11:14:53 24 4
gpt4 key购买 nike

s(Count) --> a(Count), b(Count), c(Count).

a(0) --> [].
a(succ(Count)) --> [a], a(Count).

b(0) --> [].
b(succ(succ(Count))) --> [b], b(Count).

c(0) --> [].
c(succ(succ(succ(Count)))) --> [c], c(Count).

好吧,很容易为每个规则使用 succ(0) 创建像 a^n b^n c^n 这样的语言,但是当涉及到改变 a b 和 c 的每个 block 的 n 时,它不起作用。

最佳答案

查看您的条款,例如:

c(0) --> [].
c(succ(succ(succ(Count)))) --> [c], c(Count).

请注意,您只匹配两种情况 - 零个或三个字符,但是一两个呢?修改 c考虑到每个可接受的长度似乎是一个死胡同,更容易指定多少 c s 你想要相对于你的数量 a s 和 b在你控制它们的地方,即 s :

s(succ(succ(Count))) --> a(succ(succ(Count))), b(succ(Count)), c(Count).

这自然会转化为您的规范:对于 N至少两个,接受 N a小号,N-1 b s 和 N-2 c

现在剩下的很容易就位:

a(0) --> [].
a(succ(Count)) --> [a], a(Count).

b(0) --> [].
b(succ(Count)) --> [b], b(Count).

c(0) --> [].
c(succ(Count)) --> [c], c(Count).

当然,您可以将它们替换为通用子句 char(Char, Count) (留作练习)。

?- phrase(s(succ(succ(succ(0)))), X).
X = [a, a, a, b, b, c].

关于prolog - 我正在尝试使用 DCG 创建一种语言 a^n b^n-1 c^n-2 但无法使 succ(0) 处理 n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53588615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com