【问题标题】:I can't seem to set the value of a char in haskell?我似乎无法在 haskell 中设置 char 的值?
【发布时间】:2013-10-11 13:32:12
【问题描述】:

我正在学习 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 = "!"

【问题讨论】:

  • 双引号用于字符串,单引号用于单个字符。

标签: haskell char


【解决方案1】:

单独考虑您想要进行的转换,以及您想要进行多少次。 repConsonant 应该是 Char -> 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

【讨论】:

    【解决方案2】:

    尝试在 ghci 中输入repConsonant 'a'

    另外,do 是多余的。请改用else "NO CONVERSION REQUIRED"

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 1970-01-01
      • 2016-07-07
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 2012-03-11
      • 1970-01-01
      相关资源
      最近更新 更多