Haskell中有趣的谜题

JmR*_*Rag 1 haskell

你好学习Haskell我在Web上练习,它要求创建一个给定整数的列表,方法如下所述:

例如,如果integer为3,则应生成包含以下内容的列表:

[[3],[1,2],[2,1],[1,1,1]]
Run Code Online (Sandbox Code Playgroud)

注意

3=3
1+2=3
2+1=3
1+1+1=3
Run Code Online (Sandbox Code Playgroud)

如果整数是2那么它将是:

[[2],[1,1]]
Run Code Online (Sandbox Code Playgroud)

我不能想到实现这个的方法,所以你能给我提供任何提示吗?我相信我必须使用列表理解,但我想不出更多

Ben*_*esh 10

始终以类型签名开头:

sums :: Int -> [[Int]]
Run Code Online (Sandbox Code Playgroud)

现在,让我们考虑一下递归.

  1. 什么是基本情况?你能想到一个答案微不足道的数字吗?
  2. 假设您已实现了您的功能,它适用于10以下的所有数字,因此sums 9例如返回正确的答案.你会如何实施sums 10

在您回答这些问题之前,不要打扰自己的实施细节(例如列表理解与filtermap).

另一个提示:Haskell程序员喜欢炫耀并创建微小的免费功能,但不要让它混淆你.让事情发挥作用是重要的.拥有一个有点"丑陋"的解决方案比盯着屏幕寻找优雅的解决方案更好.

祝好运!

  • 你不是指`Int - > [[Int]]`? (3认同)