Haskell - 声明/使用数据

Fer*_*rry 1 haskell types

这是我第一次在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)

它现在可以工作,如果字符串得到元音和辅音或只有元音,如何改善代码,所以它也只与辅音一起工作?

dav*_*420 5

这是功课,不是吗?

您的代码问题包括:

  1. 这条线毫无意义:

    cheak [] = ""
    
    Run Code Online (Sandbox Code Playgroud)

    因为cheak应该返回一个Consonant,但在这里你返回一个String.

  2. 这条线也没有意义:

    cheak = Cons (seq:seqs) "Is Consonant"
    
    Run Code Online (Sandbox Code Playgroud)

    beacause cheak应该接受一个String参数并返回一个Consonant,但在这里你只需返回一个Consonant不带任何参数.

  3. 这条线更没意义:

    else    cheak = Cons (seq:seqs) "Not Consonant"
    
    Run Code Online (Sandbox Code Playgroud)

    Haskell不是Pascal或Visual Basic.通过让等式的RHS评估为该值,可以从函数返回值.

  4. 缩进很重要.

  5. 有一个break在Haskell中调用的函数,但它与break您在Java或C中可能熟悉的关键字无关.Haskell中不存在突破循环的Java/C概念.

  6. 您可能想要使用辅助函数.

  7. "吱吱"不是一个字.

  8. if- then- else不是声明.then-branch和else-branch也不是语句.他们都是表达方式.它就像?:来自Java,C和其他一些语言.