Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell中合并排序中的编译错误_Haskell_Mergesort - Fatal编程技术网

Haskell中合并排序中的编译错误

Haskell中合并排序中的编译错误,haskell,mergesort,Haskell,Mergesort,我在Haskell中编写合并排序,它给出了一个奇怪的错误: Couldn't match expected type '[a0] -> Int' with actual type '[Int]' 代码是: f :: [Int] -> [Int] f l |length l == 1 = l |length l == 2 = if head l > last l then reverse l else l |otherwise = myappend (

我在Haskell中编写合并排序,它给出了一个奇怪的错误:

Couldn't match expected type '[a0] -> Int' with actual type '[Int]'
代码是:

f :: [Int] -> [Int] 
f l 
  |length l == 1 = l    
  |length l == 2 = if head l > last l then reverse l else l
  |otherwise = myappend ( take ( div length l 2 )  l )  ( drop ( div length l 2 ) l )

myappend  :: [Int] -> [Int] -> [Int]
myappend l [] = l
myappend [] l = l
myappend ( x : xs ) (y : ys) = if x > y then y : x : myappend xs ys else x : y : myappend ys xs 

您的问题在于
div length L2
部分。这里给出了
div
3个参数:
length
l
和2。相反,您应该编写
div(length l)2

您的问题在于
div length l2
部分。这里给出了
div
3个参数:
length
l
和2。相反,您应该编写
div(length l)2

谢谢。有人能告诉我哈斯克尔如何阅读一份声明吗?我的指导老师告诉我,函数运算具有最高的优先级。它有。但也要记住,函数是数据。因此,只有当函数是运算符后的第一个单词时,函数应用才会发生。最后,看看这本书。它将使您快速了解Haskell。是的,它是左关联的,因此
div length L2
实际上是
((div length)l)2
。谢谢。有人能告诉我哈斯克尔如何阅读一份声明吗?我的指导老师告诉我,函数运算具有最高的优先级。它有。但也要记住,函数是数据。因此,只有当函数是运算符后的第一个单词时,函数应用才会发生。最后,看看这本书。它将使您快速了解Haskell。是的,它是左关联的,因此
div length L2
实际上是
((div length)l)2
。您的算法被破坏了,而您的
myappend
是错误的。考虑合并<代码> [1,2,5] < /代码>和<代码> [3,4] < /代码>。另外,下次请完整显示您的错误消息。我已经修复了它。我无法用一些数据检查我的程序,因为它没有编译。谢谢你的建议。你的算法坏了,你的
myappend
错了。考虑合并<代码> [1,2,5] < /代码>和<代码> [3,4] < /代码>。另外,下次请完整显示您的错误消息。我已经修复了它。我无法用一些数据检查我的程序,因为它没有编译。谢谢你的建议。