gpt4 book ai didi

haskell - 从字符串中获取元音并在 Haskell 中打印它们

转载 作者:行者123 更新时间:2023-12-02 11:23:11 25 4
gpt4 key购买 nike

我刚刚开始学习 Haskell,但我有点卡住了。

https://gyazo.com/b70aee3b5a031a6d65ea2fe993ea0824

我已经尝试过,但我真的不知道如何解决我出错的地方。

vowels :: String -> String
vowels [] = []
vowels xs = [] == [ x | x <- vowels , x == "a" || x == "e" || x == "i" || x == "o" || x == "u" ]

最佳答案

首先

你就快到了

vowels xs = [ x | x <- xs , x == 'a' ||
x == 'e' ||
x == 'i' ||
x == 'o' ||
x == 'u' ]

但是实际的错误是什么?

  1. 您正在使用该函数作为列表的输入
  2. String垃圾被 " 包围哪里Char垃圾有 '和内部String Haskell 中的 s 只是 [Char]所以你需要使用字符。

但是 Haskell 以简洁性和表现力而闻名 - 列表推导式是一种很好的方法,但我们可以做得更好吗?

是的,我们可以!

您实际上要做的是实现 filter ,所以让我们分析一下您要过滤的内容 - 元音,所以让我们提取该部分:

isVowel x = x == 'a' || ... || x == 'u'

好吧,这仍然不优雅,但是有一个名为 elem 的函数检查列表中是否包含某些内容。

isVowel x = x `elem` ['a','e','i','o','u']

并且知道String =[Char]我们可以重写它(使用所谓的反引号语法,它允许使用 2 个参数的函数作为中缀函数)

isVowel :: Char -> Bool
isVowel x = x `elem` "aeiou"

然后回到原来的问题,现在我们有一个函数告诉我们什么是元音......

vowel :: String -> String
vowel = filter isVowel

现在您可能感兴趣 xs 在哪里- 因为 haskell 有一个很棒的类型系统,所以它可以得出 = 两侧都缺少一个参数符号,您不需要自己编写(这种风格称为 pointfree)。

关于haskell - 从字符串中获取元音并在 Haskell 中打印它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38858857/

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