小编Aty*_*afi的帖子

mapM 如何与 Haskell 中的 const 函数一起工作?

由于我一直在寻找优化我一直在制作的密码破解程序的方法,我遇到了一个列表中所有可能的字符组合的更短的实现,它使用了这个函数:

mapM (const xs) [1..n]
Run Code Online (Sandbox Code Playgroud)

哪里xs可以是可用的字符,以及n所需单词的长度。所以

mapM (const "abcd") [1..4]
Run Code Online (Sandbox Code Playgroud)

会输出一个列表["aaaa","aaab","aaac","aaad","aaba","aabb"..]等等。只有长度对右边的列表很重要,我可以写['f','h','s','e']或任何 4 个元素列表代替。

我可以理解为什么列表无关紧要,它被传递给了一个const函数。我可以看到const一个列表在技术上满足(a -> m a).

但我的问题是:为什么不是简单的输出["abcd","abcd","abcd","abcd"],或者可能"abcdabcdabcdabcd"?什么是一个const函数做输出给定的字母所有4度字母的变化?

monads combinations haskell constants map-function

5
推荐指数
1
解决办法
208
查看次数

标签 统计

combinations ×1

constants ×1

haskell ×1

map-function ×1

monads ×1