Haskell-声明/使用数据
这是我第一次在Haskell中使用数据类型。 遇到问题,我不知道如何改进代码 问题是: Declear一个名为Consonant的数据类型,其中包括一些lettersstring,以及一个textstring,它获取有关该单词中所有字母是否为Consonant的信息,然后编写一个函数Cheak,该函数将indata一些字母输入Cheak,并输出数据类型Consonant 这是我的密码:Haskell-声明/使用数据,haskell,types,Haskell,Types,这是我第一次在Haskell中使用数据类型。 遇到问题,我不知道如何改进代码 问题是: Declear一个名为Consonant的数据类型,其中包括一些lettersstring,以及一个textstring,它获取有关该单词中所有字母是否为Consonant的信息,然后编写一个函数Cheak,该函数将indata一些字母输入Cheak,并输出数据类型Consonant 这是我的密码: module Consonant where import Char type Name = String
module Consonant where
import Char
type Name = String
type ConOrNot = String
data Consonant = Cons Name ConOrNot
deriving (Show,Eq)
isVowel = "AEIOU"
cheak :: String -> Consonant
cheak [] = ""
cheak (char:chars) =
if elem (toUpper char) isVowel == false
then cheak chars
else cheak = Cons (char:chars) "Not Consonant"
-- here I want to use "break", but I don't know how to use it in Haskell...
cheak = Cons (char:chars) "Is Consonant"
它不起作用。。。如何更改代码?请帮忙!谢谢大家!
更新:
module Consonant where
import Char
type Word = String
type ConOrNot = String
data Consonant = Cons Word ConOrNot
deriving (Show,Eq)
isConsonant = "BCDFGHJKLMNPQRSTVWXYZ"
cheak :: String -> Consonant
cheak [] = Cons "" ""
cheak (char:chars)
|elem (toUpper char) isCosonant = cheak chars --if all the letters are cosonant, I want it return (Cons (char:chars) "is Consonant").. still working on it
|otherwise = Cons (char:chars) "Not Consonant"
如果字符串同时包含元音和辅音,或者只包含元音,那么它现在就可以工作了。如何改进代码,使其也只包含辅音?在Haskell中有很多方法可以实现您想要的功能。显而易见的第一选择是“也许”和“要么”。但是,一般来说,请查看。在Haskell中,有很多方法可以完成您想要做的事情。显而易见的第一选择是“也许”和“要么”。但总的来说,这是家庭作业,不是吗 代码中的问题包括: 这句话毫无意义:
cheak [] = ""
cheak = Cons (seq:seqs) "Is Consonant"
因为cheak应该返回一个辅音,但这里您返回一个字符串
这句话也毫无意义:
cheak [] = ""
cheak = Cons (seq:seqs) "Is Consonant"
因为cheak应该接受一个字符串参数并返回一个辅音,但这里您只返回一个辅音而不接受任何参数
这句话就更没道理了:
else cheak = Cons (seq:seqs) "Not Consonant"
Haskell不是Pascal或Visual Basic。通过让方程的RHS求值为该值,可以从函数返回一个值
缩进很重要
Haskell中有一个名为break的函数,但它与您可能熟悉的Java或C中的break关键字无关。Haskell中不存在打破循环的Java/C概念
您可能想要使用一个helper函数
切克不是一个词
如果那么else不是一个语句。then分支和else分支也不是语句。它们都是表情。就像?:来自Java、C和其他一些语言
这是家庭作业,不是吗 代码中的问题包括: 这句话毫无意义:
cheak [] = ""
cheak = Cons (seq:seqs) "Is Consonant"
因为cheak应该返回一个辅音,但这里您返回一个字符串
这句话也毫无意义:
cheak [] = ""
cheak = Cons (seq:seqs) "Is Consonant"
因为cheak应该接受一个字符串参数并返回一个辅音,但这里您只返回一个辅音而不接受任何参数
这句话就更没道理了:
else cheak = Cons (seq:seqs) "Not Consonant"
Haskell不是Pascal或Visual Basic。通过让方程的RHS求值为该值,可以从函数返回一个值
缩进很重要
Haskell中有一个名为break的函数,但它与您可能熟悉的Java或C中的break关键字无关。Haskell中不存在打破循环的Java/C概念
您可能想要使用一个helper函数
切克不是一个词
如果那么else不是一个语句。then分支和else分支也不是语句。它们都是表情。就像?:来自Java、C和其他一些语言
我不完全确定你要什么。返回的Cons中的单词应该是传递给cheak的单词,还是从第一个元音开始的单词的剩余部分 这是你想要的吗
module Consonant
where
import Data.Char
type Word = String
type ConOrNot = String
data Consonant = Cons Word ConOrNot
deriving (Show,Eq)
cheak :: Word -> Consonant
cheak "" = Cons "" ""
cheak s = Cons s $ if any isVowel s then "Not Consonant" else "is Consonant"
where isVowel c = (toUpper c) `elem` "AEIOU"
我不完全确定你要什么。返回的Cons中的单词应该是传递给cheak的单词,还是从第一个元音开始的单词的剩余部分 这是你想要的吗
module Consonant
where
import Data.Char
type Word = String
type ConOrNot = String
data Consonant = Cons Word ConOrNot
deriving (Show,Eq)
cheak :: Word -> Consonant
cheak "" = Cons "" ""
cheak s = Cons s $ if any isVowel s then "Not Consonant" else "is Consonant"
where isVowel c = (toUpper c) `elem` "AEIOU"
这正是我想要的。谢谢你的帮助,这正是我想要的。谢谢你的帮助。