gpt4 book ai didi

haskell - 平衡语言,2 个非终结符,列表理解

转载 作者:行者123 更新时间:2023-12-04 17:43:38 26 4
gpt4 key购买 nike

所以,我正在读一本书,“形式语言理论导论”,它描述了一种语言 L(G) = {a^n ++ b^n | n > 0} .

它有以下产品:

S -> ab | aSb

因此会产生以下语言:
a, ab, aabb, aaabbb, ...

我想知道如何使用 Haskell 的列表理解来创建这种语言。我知道我可以使用字符串进行列表理解,但我几乎是一个初学者,并且不确定如何获得像我想要的这些字符串一样的无限列表。

我在想象这样的事情:
[ x ++ y | x <- ["a","aa",..] y <- ["b","bb",..]] 

最佳答案

从生产规则工作,

S -> ab | aSb

我们可以写
s = ["ab"] ++ [ "a" ++ x ++ "b" | x <- s ]

以便
~> take 5 s
["ab","aabb","aaabbb","aaaabbbb","aaaaabbbbb"]
it :: [[Char]]

你的尝试可以通过一个小的编辑工作,
[ x ++ y | x <- ["a","aa",..] | y <- ["b","bb",..]]

以便它使用 Parallel List Comprehensions扩展名(GHCi 中的 :set -XParallelListComp),枚举除外。但这很容易解决,
[ x ++ y | x <- [replicate n 'a' | n <- [1..]] 
| y <- [replicate n 'b' | n <- [1..]]]

关于haskell - 平衡语言,2 个非终结符,列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46412242/

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