gpt4 book ai didi

Haskell - 从一维列表中创建二维列表

转载 作者:行者123 更新时间:2023-12-02 08:41:01 26 4
gpt4 key购买 nike

我必须制作一个二维列表[[Int]]。来自 Haskell 中的一维列表 [Int]

该函数应带参数“r” Int 表示行数和一维列表,应将其切成长度为“r”的行。

如果列表的长度比 r*r 长,那么应该删除列表的其余部分。然而如果列表的长度小于 r*r,则缺失的元素应作为 0 插入列表中。

示例 1:

输入:r = 2

列表 = [1,2,3,4,5,6]

输出:[[1,2], [3,4]]

示例 2:

输入:r = 3

列表 = [1,2,3,4,5,6]

输出:[[1,2,3], [4,5,6], [0,0,0]]

所以我的方法是针对以下三个函数:

zeroList :: Int -> [Int] -> [Int]
zeroList r myList = (take (r*r-(length myList)) (0 : zeroList r myList))

processList :: Int -> [Int] -> [[Int]]
processList r myList = (if (length myList < r*r)
then (myList:(zeroList r myList))
else if (length (myList > r*r))
then (reverse (drop r (reverse myList)))
else
myList)

make2DList :: Int -> [Int] -> [[Int]]


make2DList r myList = (if myList == []
then make2DList
else ( ( take r (processList r myList) ):( make2DList r ( drop r (processList r myList) ) )))

zeroList 函数正常工作,但其他两个函数不工作。我有一些编译错误信息:

D:\haskell\task1.hs:6:63:
Couldn't match expected type `[Int]' with actual type `Int'
Expected type: [[Int]]
Actual type: [Int]
In the return type of a call of `zeroList'
In the second argument of `(:)', namely `(zeroList r myList)'

D:\haskell\task1.hs:14:54:
Couldn't match expected type `[[Int]]'
with actual type `Int -> [Int] -> [[Int]]'
In the expression: make2DList
In the expression:
(if myList == [] then
make2DList
else
((take r myList) : (make2DList r (drop r myList))))
In an equation for `make2DList':
make2DList r myList
= (if myList == [] then
make2DList
else
((take r myList) : (make2DList r (drop r myList))))
Failed, modules loaded: none.
Prelude>

我无法理解,为什么尽管 zeroList r myList 但它不起作用。返回一个普通列表。

谁能帮帮我?

最佳答案

我不得不承认我不明白你是怎么做的。所有这些 if then else 都非常不 Haskellish。 :-) 此外,由于 Haskell 的惰性求值和无限列表,没有必要事先计算所需零的确切数量等。

一个粗略的草稿:

make2DList r l = take r . chunks r $ l ++ zeroes
where
zeroes = [0,0..]
chunks r xs = take r xs : chunks r (drop r xs)

解释:

  1. 通过无限数量的零扩展列表,这样我们就不必再担心填充问题了。
  2. 创建一个 chunks 函数,将任何列表拆分为给定长度的 block 。
  3. chunks 应用于填充列表。
  4. 根据需要获取尽可能多的行。

关于Haskell - 从一维列表中创建二维列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16422781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com