这是我第一次在Haskell中使用数据类型.遇到问题,我不知道如何改进代码.
这是问题所在:
明确一个名为"辅音"的数据类型,其中包括一些字母(字符串),以及一个文本字符串,它获取有关该单词中所有字母是否是辅音(字符串)的信息,然后写一个函数"Cheak"得到indata(一些字母吱吱叫)和outdata(数据类型"辅音").
这是我的代码:
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"
Run Code Online (Sandbox Code Playgroud)
它不起作用......如何更改代码?请帮忙!谢谢!
更新:
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"
Run Code Online (Sandbox Code Playgroud)
它现在可以工作,如果字符串得到元音和辅音或只有元音,如何改善代码,所以它也只与辅音一起工作?
这是功课,不是吗?
您的代码问题包括:
这条线毫无意义:
cheak [] = ""
Run Code Online (Sandbox Code Playgroud)
因为cheak应该返回一个Consonant,但在这里你返回一个String.
这条线也没有意义:
cheak = Cons (seq:seqs) "Is Consonant"
Run Code Online (Sandbox Code Playgroud)
beacause cheak应该接受一个String参数并返回一个Consonant,但在这里你只需返回一个Consonant不带任何参数.
这条线更没意义:
else cheak = Cons (seq:seqs) "Not Consonant"
Run Code Online (Sandbox Code Playgroud)
Haskell不是Pascal或Visual Basic.通过让等式的RHS评估为该值,可以从函数返回值.
缩进很重要.
有一个break在Haskell中调用的函数,但它与break您在Java或C中可能熟悉的关键字无关.Haskell中不存在突破循环的Java/C概念.
您可能想要使用辅助函数.
"吱吱"不是一个字.
if- then- else不是声明.then-branch和else-branch也不是语句.他们都是表达方式.它就像?:来自Java,C和其他一些语言.
| 归档时间: |
|
| 查看次数: |
651 次 |
| 最近记录: |