haskell - 案例陈述中的Haskell函数

标签 haskell syntax-error

我已经尝试了几天,以在Haskell中编写字典,但是我遇到无法解决的大小写结构问题。每当我尝试编译这段代码时,都会出现此错误:

Dictionary.hs:24:130: error: Parse error in pattern: insertChild

   |
24 |    then case getNodeType x of (1-> insertChild currentLetter wordRemaining xs)
   |                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我不明白我是否只能在Haskell中使用函数,或者到底是什么问题。我是Haskell的新手。

整个代码是这样的:
insertChild :: Char -> [Char] -> [Dictionary] -> [Dictionary] --ED
insertChild currentLetter wordRemaining [] = if (length wordRemaining) == 0 --Si no me quedan letras 
                                               then (LETTERNODE currentLetter [WORDNODE]):[]--Añado el WORDNODE porque ya terminé la palabra
                                               else (LETTERNODE currentLetter (insertChild (head wordRemaining) (tail wordRemaining) [])):[]--Añado otro nodo con la letra y sigo con la recursión
insertChild currentLetter wordRemaining (x:xs) = if (length wordRemaining) == 0 --Si no me quedan letras
                                                 then case getNodeType x of (1-> insertChild currentLetter wordRemaining xs)
                                                                            (0-> caseInsertChild1 currentLetter wordRemaining (x:xs))
                                                 else case getNodeType x of 1-> (insertChild currentLetter wordRemaining xs)
                                                                            0-> (caseInsertChild2 currentLetter wordRemaining (x:xs))

非常感谢你!

最佳答案

您不能在括号中写上:

case something of
  (pattern -> expression)
  (pattern -> expression)

但仅限于没有:
case something of
  pattern -> expression
  pattern -> expression

这也是正确的
case something of
  pattern -> (expression)
  pattern -> (expression)

但是上面的括号是多余的,因此最好省略它们。

另外,我建议您用适当的模式匹配替换效率低下的length ... == 0和部分headtail使用。它更简单,更安全,更高效。
insertChild currentLetter []     []     = ...
insertChild currentLetter (w:ws) []     = ...
insertChild currentLetter []     []     = ...
insertChild currentLetter (w:ws) (x:xs) = ...

关于haskell - 案例陈述中的Haskell函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61971343/

相关文章:

haskell - 为什么积分约束在调用长度时需要 fromIntegral ?

haskell - 懒惰的字节串 : memory exploding in certain cases

postgresql - SQL 代码中的语法错误

php - 为什么换行符在php代码中不起作用

php - 奇怪的行为: json_encode() producing invalid json dependent on input

haskell - 如何过滤[IO a]

haskell - Haskell 将 Hom Functor/Monad 称为什么?

haskell - 如何在 Haskell 中定义一个包含现有类型的枚举类型

ruby-on-rails - 单行if-else语句,期望keyword_do

sql - ORACLE SQL CASE语句-出现错误