【发布时间】:2020-11-17 10:56:15
【问题描述】:
我有这个函数可以生成一个包含最小长度为 0 和最大长度为 n 的所有单词的列表,等于函数的输入:
import Data.List
words :: Int -> String -> [String]
words 0 alph = [[]]
words n alph = words (n-1) alph ++ [ ch:w | w <-words (n-1) alph, ch <- alph]
当我运行它时,输出如下:
> words 3 "AB"
["","A","B","A","B","AA","BA","AB","BB","A","B","AA","BA","AB","BB","AA","BA","AB","BB","AAA","BAA","ABA","BBA","AAB","BAB","ABB","BBB"]
这里的问题是,在这个例子中,有一些单词重复,尤其是长度为 2 的单词(“AA”是 3 次)。你能看出我在我的函数中做错了什么吗,或者你知道如何解决它吗?
【问题讨论】:
-
列表理解中的
words (n-1) alph不仅包含长度为n-1的单词,而且长度更小,因为您如何定义words。
标签: haskell