创建一个检查Haskell中的字谜的函数

时间:2017-10-10 20:29:44

标签: sorting haskell recursion tail-recursion anagram

所以我正在尝试创建一个获取单词列表并在新列表中返回字谜的函数。这就是我到目前为止所做的:

quicksort :: Ord a => [a] -> [a]
quicksort []     = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
    where
        lesser  = filter (< p) xs
        greater = filter (>= p) xs

sub(a,[]) = []
sub(a,b:c) = if a == b then c else b:(sub(a,c))

sublist([],a) = a
sublist(a:b,c) = sublist(b,sub(a,c))

anagram a b = quicksort (a) == quicksort (b)

find a,[] = nil
find (a, b:c) = if anagram a b then b:(find(a,c)) else find(a,c)

listana [] = nil
listana (a:c) = list:(listana(sublist(list,a:c)))
              where list = a:(find(a,c))

我很确定我的查找功能存在问题。 哦,我是Haskell的新手,所以请放轻松我。

1 个答案:

答案 0 :(得分:1)

开始不错!

进行此编译所需的最小更改是将nil替换为[],并将参数括在find周围。所以:

-- change one
find (a,[]) = []

-- change two
listana [] = []

那里有很多改进。我鼓励您浏览Data.List模块,看看那里实现的任何函数是否有用。还有一个标准技巧,使用Data.Map将项目组合在一起,使其成为单行;请参阅another answer of mine以获取提示。