您好,我在Haskell上有一个列表,其中有近10^15个Int,我正在尝试打印列表的长度。
let list1 = [1..1000000000000000] -- this is just a dummy list I dont
print list1 length -- know the actual number of elements
打印需要很长时间,有没有其他方法可以获得列表中元素的数量并打印该数量?
我有一个函数列表声明如下(第一个参数是a (列表),第二个参数是b(也是列表),它应该返回3List:
cc :: [(String, String)] -> [(String, String)] -> [(String, String)]
cc a b = do
示例:
a = [("aaa", "xxx"), ("bbb", "xxx")]
b = [("xxx", "ccc"), ("xxx", "ddd")]
c should be [("
我是Haskell的新手,我正在尝试从input中获取一个值列表,并从列表中每行打印出一项。
func :: [String] -> IO ()
当列表大小只有1时,我很难弄清楚如何打印出列表中的项目。
func [] = return ()
func [x] = return x
我在尝试编译该文件时收到以下错误消息:
Couldn't match expected type `()' with actual type `String'
In the first argument of `return', namely `x'
我试着逐行打印这个用逗号分隔的列表,这就是我到目前为止所拥有的
A = [["1", "2", "3"], ["2", "3", "4"], ["4", "5", "6"]]
for i in A:
for k in i:
print(k.join(','))
print()
现在,这是单独打印列表,但是一个元素一个元素地打印。
这是预期的产出:
1,2,3
2,3,4
4,5,6
嗨,我是Haskell编程的新手。我正在尝试自己实现运算符"++“。下面是我编写的一个小程序,但它无法工作:
append (es:e) xs =
if (null es)
then e:xs
else append es (e:xs)
我收到了许多与a,[a]和[a]的类型错误。Haskell中的列表类型仍然令人困惑。有人能帮我吗?谢谢。:)
在Haskell中,如何有效地将无限列表的最后一项与有限列表连接起来?
last不工作,它显然是从头部迭代的,因此以下内容永远不会完成:
-- let's have a list of all natural numbers,
-- with zero appended
arr = [1..] ++ [0]
-- it was fast! now get the last item, should be easy
res = last arr
编辑:我想知道Haskell对[1..] ++ [0]的内部表示是什么,最初是“完全未评估”吗?如果它将内部表示为由两个(未评估的)列表组成的“
在大多数功能语言(包括Haskell )中,定义链接列表类型本身是简单的:
data List a = Nil | Cons a (List a)
但是,我在Haskell教程中找不到显示如何定义自己的数组类型的教程。如何定义数组数据类型,就像我们从无到有地定义自己的列表一样?
Note:我的问题不是如何在Haskell中使用数组,而是理论上如何定义自己的数组类型,就像为List所做的那样,而不使用任何类型的库或内置功能。
我正在努力学习Haskell,我想解决一项任务。我有一个整数列表,如果它们比它们的邻居都大,我需要将它们添加到另一个列表中。例如:我有一个0,1, 5,2,3,7,8,4的起始列表,我需要打印出一个5,8的列表
这是我编写的代码,但它返回一个空列表:
largest :: [Integer]->[Integer]
largest n
| head n > head (tail n) = head n : largest (tail n)
| otherwise = largest (tail n)
在几种编程语言(包括JavaScript、Python )中,可以将列表放在自己的内部,这在使用列表表示无限详细的分形时是有用的。然而,我试着在Haskell中这样做,但是它并没有像我预期的那样起作用:
--aList!!0!!0!!1 should be 1, since aList is recursively defined: the first element of aList is aList.
main = putStrLn $ show $ aList!!0!!0!!1
aList = [aList, 1]
该程序没有打印1,而是生成了以下编译器错误:
[1 of 1] Com
我是Haskell的新手,阅读教程,我发现了类似的东西。
由于Haskell的懒惰,即使您在列表上映射了几次并过滤了几次,它也只会通过列表一次。
这就是我简单的愚蠢的例子:x = map foo (map foo [1,2]) where foo p = p * 2
现在,在我的脑海中出现了两个问题。
为什么这要归功于懒惰?我知道懒惰意味着它在必要之前不会评估表达,但是.它如何强制迭代列表一次而不是声明的映射/过滤器数量?
如何验证它只迭代一次?
额外的问题-我知道副作用是.如果我能打印一些东西来调试,那就太好了。
foo p =
let printRes
我最近开始学习haskell,我遇到了这样的问题:
我想要生成只有偶数的fibonacci数的列表。我创建了递归函数来计算斐波纳契数,现在我试图将这个数字插入到列表中
[fib x | x <- [1..]]
现在假设我只想把那些计算出来的fib x数小于一定的数,例如。fib x < 92100000
我可以用filter(<92100000)[fib x | x <- [1..]]打印这个数字,但是代码仍然会永远运行,填充列表。
当fib x足够大时,如何完成列表插入?