2012-07-16 92 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]將只匹配列表與這可能不是你一個單一的元素想。完成此功能,或將其註釋掉,然後繼續。顯然你目前沒有使用它。等等。