相关疑难解决方法(0)

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
查看次数

使用列表理解的谓词自定义过滤器功能

我需要开发自己的过滤器功能,类似于filter在Haskell中的工作原理,但是要使用列表理解和谓词。因此,我将lcFilter (>3) [1,2,3,4,5,6,10,444,3]输入ghci,它将打印所有大于3的数字。

我的代码基于一个我擅长的递归示例,但我似乎无法转换为列表理解。无论我输入什么内容,[x | x<-xs, p]它都会缝在一起,始终会引发编译器错误。我知道这p部分是错误的。我已经尝试过了==pxs==p几乎可以想到的所有其他东西。这使我认为其他部分可能是错误的,但我真的不确定。

这是我的功能的代码lcFilter。我不确定是否部分或全部错误,因此我将整个过程发布。

lcFilter :: (a -> Bool) -> [a] -> [a]
lcFilter _ [] = []
lcFilter p (x:xs) = [x | x<-xs, p]
Run Code Online (Sandbox Code Playgroud)

如果输入,lcFilter (>3) [1,2,3,4,5]它应该[4,5]像标准的Haskell filter函数一样打印。

haskell list-comprehension filter higher-order-functions

3
推荐指数
1
解决办法
82
查看次数

用于在Haskell中生成列表的唯一组合的函数

是否有一个Haskell函数可以从列表中生成给定长度的所有唯一组合?

Source = [1,2,3]

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

我试过寻找Hoogle,但找不到具体做到这一点的功能.排列不会产生预期的结果.

以前有人用过类似的功能吗?

combinations haskell combinatorics

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