我似乎无法在haskell中设置char的值?

时间:2013-10-11 13:32:12

标签: haskell char

我正在学习haskell并且在理解它时遇到了一些麻烦。基本上,我有一个程序会在一个字母中读取,如果它是'!'的辅音就改变它,但是我似乎无法设置字符的值..

这是我目前的代码..

isConsonant :: Char -> Bool
consonant_alphabet = ['b'..'d']++['f'..'h']++['j'..'n']++['p'..'t']++['v'..'z'] ++ ['B'..'D']++['F'..'H']++['J'..'N']++['P'..'T']++['V'..'Z']
isConsonant character = character `elem` consonant_alphabet

repConsonant :: Char -> String
repConsonant c =
    if isConsonant c
        then "CONVERT IT TO !"
        else do "NO CONVERSION REQUIRED"

我把它作为字符串输出用于调试目的,但我无法想出这一个..任何想法?我试过了

let c = "!"

2 个答案:

答案 0 :(得分:6)

考虑您想要单独进行的转换,以及想要进行多少次转换。 repConsonant应该是Char - >炭

repConsonant :: Char -> Char
repConsonant c =
 if isConsonant c
    then '!'
    else c

现在repConsonant应该对角色做你想做的事,你需要做的就是把它应用到字符串中的每个角色。

  

我似乎无法设置角色的值。

是的,您只能为名称指定一次值。这是设计的。它应该指导您的程序设计为较小的函数,将输入转换为输出样式的编程。如果需要在函数内部构建值,则需要“let in”或“where”语法。

let addone a = let b = 1 in a + b

let addtwo a = a + b
  where b = 2

答案 1 :(得分:1)

尝试在ghci中输入repConsonant 'a'

此外,do是多余的。仅使用else "NO CONVERSION REQUIRED"代替。