将它们放在一起时的编译器错误

时间:2012-07-18 13:23:13

标签: haskell binary-search

我通过二进制搜索编写用于在元组索引列表中搜索的程序我写的并且工作正常

superBubble::(Ord t) =>[[t]]->[[t]]
superBubble a=map bubbleSort a
combining::[BookInfo]->[Int]
combining books= bubbleSort(map index books)  
 binsearch :: [Int] -> Int -> Int -> Int -> Int -- list, value, low, high, return int
 binsearch xs value low high
  | high < low       = -1
  | xs!!mid > value  = binsearch xs value low (mid-1)
  | xs!!mid < value  = binsearch xs value (mid+1) high
  | otherwise        = mid
   where
   mid = low + ((high - low) `div` 2)
  final::[BookInfo]->Int->Int->Int->Int 
  final vs key s r= binsearch concat( combining vs) key s r

和其他函数有效地工作但是当我将它添加到孔时给我一个错误

错误未被删除'|'第一个,但为什么?

1 个答案:

答案 0 :(得分:1)

来自binsearch ::的行比前面的行缩进了一个空格。将这些行中的每一行取消一个空格。

此外,从final::开始的行比初始行缩进了两个空格。将这些行中的每一行取消两个空格。

最后,正如丹尼尔指出的那样,-<行中有一个final::,而不是->(您现在已在发布的代码中对其进行了更正,从而使将来查看此问题的任何人感到困惑。)


正确的代码:

superBubble::(Ord t) =>[[t]]->[[t]]
superBubble a=map bubbleSort a
combining::[BookInfo]->[Int]
combining books= bubbleSort(map index books)  
binsearch :: [Int] -> Int -> Int -> Int -> Int -- list, value, low, high, return int
binsearch xs value low high
 | high < low       = -1
 | xs!!mid > value  = binsearch xs value low (mid-1)
 | xs!!mid < value  = binsearch xs value (mid+1) high
 | otherwise        = mid
  where
  mid = low + ((high - low) `div` 2)
final::[BookInfo]->Int->Int->Int->Int 
final vs key s r= binsearch concat( combining vs) key s r

(您还需要包含bubbleSortBookInfoindex的定义。)


为什么缩进是错误的?

因为它使binsearch看起来好像是combining的值的一部分,而不是单独的函数。第一个|是第一个不可能成为表达式一部分的字符。