我正在学习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 = "!"
答案 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"
代替。