我已经尝试了几天,以在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
和部分head
,tail
使用。它更简单,更安全,更高效。insertChild currentLetter [] [] = ...
insertChild currentLetter (w:ws) [] = ...
insertChild currentLetter [] [] = ...
insertChild currentLetter (w:ws) (x:xs) = ...
关于haskell - 案例陈述中的Haskell函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61971343/