我选择二进制搜索记录数组的索引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解析错误时出错了?以及我如何纠正它?
答案 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]
只匹配具有单个元素的列表,这可能不是您想要的。完成此功能,或将其注释掉并继续完成其余功能。显然你现在根本不使用它。等等。