在haskell中通过冒泡排序搜索元组列表的排序索引

时间:2012-07-16 07:07:56

标签: haskell tuples

我选择二进制搜索记录数组的索引ascasestudy我的研究生研究由c ++和haskell我编写 c ++代码和工作,现在我为haskell一个工作

  import Data.List

  data BookInfo = Book Int String [String]
            deriving (Show)

- 输入变量

  entering :: Int String [String]-> Book
  entering id name subject= Book id name subject

- 制作元组数组的idex

  index :: [Book]->[Int]
  index [m] = getID (Book id _     _      ) = id
  main :: IO ()
  main = do
  putStrLn "Please enter your book id,name,Subject"
  Book inpStr <- getLine
  putStrLn print r

- 使用地图的BubbleSort

 bubbleSort ::(Ord x) => [x] -> [x]
 bubbleSort (x':xs) = if x>x' then x': bubbleSort(x:xs)
                  else
                  if x<x' then x: bubbleSort(x':xs)
                  else 
                               x: bubbleSort(X':xs)

 bubble ::[a] -> [a]
 bubble [a] = map bubbleSort [a]

- 为数组制作索引

 indexsort(ord a)::[int]->[Int]
 indexsort a=bubble a

- 制作元组列表

 addBooks2List Book->[Book]->[Book]
 addBooks2List b m=b:entering b':m

- 的binarySearch

 binarysearch [Int]->Int->Int->Int->Int
 a=bubble x
 binaryseach a i m j=
 let u=(i+m)/2
 if a[u]=j then u
 if a[u]>j then binaryseach a i u-1 j
 else 
 if a[u]<j then binarysearch a u+1 m j
 if i=m "Not found"

- 打印具有搜索ID

的元组
 print::Int->Book
 print r= Book r y z 
 r=binaryseach m 0 (length m)

在输入'输入'这个错误意味着什么的8:3解析错误时出错了?以及我如何纠正它?

2 个答案:

答案 0 :(得分:3)

首先,entering的类型签名应为

entering :: Int -> String -> [String] -> BookInfo

而不是entering :: Int String [String]-> Book - 但这是一个类型错误,而不是解析错误。

也许你的缩进是错误的,但如果没有逐字提供你的代码就很难说清楚。请记住:在Haskell中,与C和Java等语言相反,代码的布局很重要。

无论如何,您发布的代码远非针对您的问题的解决方案。您可能需要退一步,研究如何在Haskell中编写基本函数,然后再研究如何将它们粘合在一起以获得更多涉及的程序。我真的怀疑是否通过尝试将C ++片段转换为Haskell来学习语言很有可能获得成功。只是我的两分钱,但是......

答案 1 :(得分:3)

你的代码中存在很多问题,你最好从一个函数开始,慢慢地扩展程序并看到你得到了编译的增量部分。从这开始:

entering :: Int String [String]-> Book
entering id name subject= Book id name subject

首先,Book不是类型而是数据构造函数,类型为BookInfo。然后,你错过了箭头(正如dblhelix指出的那样)。所以它应该是:

entering :: Int -> String -> [String]-> BookInfo
entering id name subject= Book id name subject

这将编译。但是,entering现在与Book相同。无论如何,继续添加下一个函数并将其编译等等。

如果我们继续,

index :: [Book]->[Int]
index [m] =

缺少定义(=右侧的内容是什么?),而[m]只匹配具有单个元素的列表,这可能不是您想要的。完成此功能,或将其注释掉并继续完成其余功能。显然你现在根本不使用它。等等。