2012-07-16 80 views
1

我选择二进制搜索记录数组的索引ascasestudy对于我的研究生的研究由C++和haskell编写编写 C++代码和工作,现在我为haskell一个在haskell中通过冒泡排序在排序的索引中进行搜索

import Data.List 

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

--Entering变量

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

--make元组的阵列的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 ::(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] 

--make指数为阵列

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

--make元组的列表

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" 

--printing具有搜索ID

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

它在8犯了一个错误的元组:输入3解析错误“进入”这个错误是什么意思?以及我如何纠正它?

回答

3

一方面,为entering类型签名改为

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

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

也许你的缩进是错误的,但是如果没有逐字提供你的代码,这很难说清楚。记住:在Haskell中,与诸如C和Java之类的语言不同,代码的布局很重要。

无论如何,正如您发布的那样,代码远没有解决您的问题。您可能需要回过头几步,研究如何在Haskell中编写基本函数,然后再研究如何将它们粘合在一起以便获得更多涉及的程序。我真的怀疑,通过将C++片段转换成Haskell来学习语言是否有很高的成功几率。只是我的两分钱,虽然...

+0

谢谢你的帮助 – 2012-07-16 09:05:20

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]将只匹配列表与这可能不是你一个单一的元素想。完成此功能,或将其注释掉,然后继续。显然你目前没有使用它。等等。