相关疑难解决方法(0)

如何在Haskell中获得大数字的总和?

我是一名C++程序员,正在尝试自学Haskell,并且它证明了把握使用函数作为一种循环的基础知识的挑战.我有一个很大的数字,50!,我需要添加其数字的总和.这是一个相对简单的C++循环,但我想学习如何在Haskell中完成它.

我已经阅读了一些入门指南,能够获得50分!同

sum50fac.hs ::

fac 0 = 1
fac n = n * fac (n-1)
x = fac 50
main = print x
Run Code Online (Sandbox Code Playgroud)

不幸的是,在这一点上,我并不完全确定如何处理这个问题.是否有可能编写一个函数将(mod)x 10添加到一个值,然后在x/10上再次调用相同的函数,直到x/10小于10?如果那不可能,我应该如何处理这个问题?

谢谢!

haskell

13
推荐指数
4
解决办法
8644
查看次数

在Haskell中从右侧加倍列表中的每个其他元素

我有一个列表,我想从右边加倍此列表中的每个其他元素.

还有另一个相关的问题可以解决这个问题,但它从左边开始翻倍,而不是右边:Haskell:列表中的每个第2个元素加倍

例如,在我的情景中,[1,2,3,4]将变为[2,2,6,4],在那个问题中,[1,2,3,4]将成为[1,4,3] ,8].

我该如何实现?

haskell

8
推荐指数
3
解决办法
5628
查看次数

Haskell生成n个数的所有组合

我正在尝试生成n个数字的所有可能组合.例如,如果n = 3,我会想要以下组合:

(0,0,0), (0,0,1), (0,0,2)... (0,0,9), (0,1,0)... (9,9,9).
Run Code Online (Sandbox Code Playgroud)

这篇文章描述了如何在n = 3时这样做:

[(a,b,c) | m <- [0..9], a <- [0..m], b <- [0..m], c <- [0..m] ]
Run Code Online (Sandbox Code Playgroud)

或者为了避免重复(即同一个n-uple的多个副本):

let l = 9; in [(a,b,c) | m <- [0..3*l],
                         a <- [0..l], b <- [0..l], c <- [0..l],
                         a + b + c == m ]
Run Code Online (Sandbox Code Playgroud)

然而,遵循相同的模式将很快变得非常愚蠢n > 3.说我想找到所有的组合:(a, b, c, d, e, f, g, h, i, j)等等

任何人都能指出我在正确的方向吗?理想情况下,我宁愿不使用内置功能,因为我正在尝试学习Haskell,我宁愿花时间去理解一些代码而不仅仅是使用其他人编写的包.不需要元组,列表也可以.

combinations haskell functional-programming

6
推荐指数
2
解决办法
1915
查看次数

int - > [int] convert

可能重复:
使用Haskell将数字拆分为数字

如何将整数转换为整数列表Exmple:输入:1234输出:[1,2,3,4]任何关于这个问题的想法?

haskell

2
推荐指数
2
解决办法
9462
查看次数

为什么 map 使用的这个函数需要返回一个(单例)列表而不是一个元素?

您可能已经猜到了,完全是初学者。我已经完成了“Learn you a Haskell”,但我仍然在基础知识上挣扎。

我正在看这个线程 用 Haskell 将一个数字拆分成它的数字 ,这个函数开始变得有意义了

digits :: Integer -> [Int]
digits n = map (\x -> read [x] :: Int) (show n)
Run Code Online (Sandbox Code Playgroud)

丹尼尔问。

我知道 show 将我的输入数字作为字符串或字符列表返回,然后我可以使用 map 逐个修改元素。因此,每个“x”,作为一个字符,被匿名函数选择并读取为一个整数,新列表由 map 组成,包含所有读取的整数。那不read [x]应该read x吗?为什么列表中的每个读取 Char 都需要作为它自己的单例列表返回?在我看来,这种调用方式digits 123应该返回[[1],[2],[3]],因为 map 无论如何都会将所有内容组合到一个新列表中,而不是[1,2,3]像它正确的那样。但为什么?

haskell

2
推荐指数
2
解决办法
66
查看次数

Haskell Int的列表:[123]至[1,2,3]

问题

我有[123,123]的int列表,我需要作为[1,2,3,1,2,3]

现行守则

我使用递归尝试了以下代码

fat::[Int]->[Int]
fat [] = []
fat (a,b,c:xs) = a : b : c : fat xs
Run Code Online (Sandbox Code Playgroud)

结论

我不知道如何在列表[123,123]中将值设为'1','2,'3

haskell list

0
推荐指数
1
解决办法
5861
查看次数