【发布时间】:2019-03-09 23:29:37
【问题描述】:
假设我们有一个电子表格 :: [(String,String,Int)] 包含 三元组 (name, user,mark) 其中 name 是学生的姓氏,用户 是他的用户名,mark 是学生第一个 CW 的结果。 编写一个按字典顺序对电子表格进行排序的函数 sortLastname 使用练习 2 中定义的高阶插入排序按名称。
我的练习 2 代码:
homerge :: Ord b => (a -> b) -> [a] -> [a] -> [a]
homerge _ xs [] = xs
homerge _ [] ys = ys
homerge fun (x:xs) (y:ys) | fun x < fun y = x : homerge fun xs (y:ys)
| otherwise = y : homerge fun (x:xs) ys`
hoMergeSort :: Ord b => (a -> b) -> [a] -> [a]
hoMergeSort _ [x] = [x]
hoMergeSort fun xs = homerge fun (hoMergeSort fun ys) (hoMergeSort fun ws)
where (ys,ws) = (take l xs, drop l xs)
where l = length xs `div` 2
我目前的尝试:
sortLastName [(x,y,z)] = hoMergeSort ( (x,_,_) (x',_,_) = x<x' ) [(x,y,z)]
我的问题是获得正确的函数来检查 3 元组的第一个元素是否小于下一个元素。
任何建议将不胜感激。
【问题讨论】:
-
看来你在猜haskell的语法。我认为这个问题有点过于宽泛(所以不是家庭作业写作服务)。也许您可以将其简化为一个特定问题?例如,您对
hoMergeSort的第一个参数有疑问,那么为什么不删除问题的所有其他部分并询问( (x,_,_) (x',_,_) = x<x' ):这应该有什么类型?你想让它做什么?您从编译器中得到了哪些错误?具体是什么让您对它们感到困惑? -
对不起,我以为我指定了。我的意思是,什么样的代码可以让我将元组的第一个元素与一个代替
( (x,_,_) (x',_,_) = x<x' )的函数进行比较 -
写完练习2的解法,你看懂了吗?在继续后面的步骤之前,可能值得确保你理解它
-
欢迎来到 StackOverflow @henahzurfdsa!我们通常为与作业相关的问题添加
homework标签,您可以编辑您的帖子以添加标签吗?当您使用它时,请不要犹豫,在您的评论中包含澄清(说您正在寻找( (x,_,_) (x',_,_) = x<x' )的替代品)在您的帖子中。除此之外,在我看来,这是一个写得很好的问题——它展示了你的尝试并提出了明确的问题:)。
标签: haskell