相关疑难解决方法(0)

将列表拆分为可能的元组列表

我需要将列表拆分为所有可能元组的列表,但我不确定如何这样做.

例如:

pairs ["cat","dog","mouse"]
Run Code Online (Sandbox Code Playgroud)

应该导致:

[("cat","dog"), ("cat","mouse"), ("dog","cat"), ("dog","mouse"), ("mouse","cat"), ("mouse","dog")]

我能够形成前两个,但我不确定如何得到其余的.

这是我到目前为止所拥有的:

pairs :: [a] -> [(a,a)]
pairs (x:xs) = [(m,n) | m <- [x], n <- xs]
Run Code Online (Sandbox Code Playgroud)

haskell tuples list-comprehension

24
推荐指数
3
解决办法
4896
查看次数

Euler 43 - 是否有一个monad来帮助写这个列表理解?

这是一种解决欧拉问题43的方法(如果没有给出正确答案,请告诉我).是否有monad或其他合成糖可以帮助跟踪notElem条件?

toNum xs = foldl (\s d -> s*10+d) 0 xs

numTest xs m = (toNum xs) `mod` m == 0

pandigitals = [ [d0,d1,d2,d3,d4,d5,d6,d7,d8,d9] |
                d7 <- [0..9],
                d8 <- [0..9], d8 `notElem` [d7],
                d9 <- [0..9], d9 `notElem` [d8,d7],
                numTest [d7,d8,d9] 17,
                d5 <- [0,5],  d5 `notElem` [d9,d8,d7],
                d3 <- [0,2,4,6,8], d3 `notElem` [d5,d9,d8,d7],
                d6 <- [0..9], d6 `notElem` [d3,d5,d9,d8,d7],
                numTest [d6,d7,d8] 13,
                numTest [d5,d6,d7] 11,
                d4 <- [0..9], d4 `notElem` [d6,d3,d5,d9,d8,d7],
                numTest [d4,d5,d6] 7,
                d2 …
Run Code Online (Sandbox Code Playgroud)

monads haskell list-comprehension

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

如何在 Lisp 中一次生成一个列表中元素的所有排列?

我已经有了生成元素列表的所有排列的代码。然而,我意识到,如果我想操作生成的列表,我需要遍历这个列表。该列表可能会很大,因此维护成本很高。我想知道是否有一种方法可以通过每次调用生成排列,以便我可以检查列表是否与我需要的匹配,如果不匹配,我将生成下一个排列。(每次该函数都会一次返回一个列表。)

我的代码:

(defun allPermutations (list) 
  (cond
     ((null list)  nil) 
     ((null (cdr list))  (list list)) 
     (t  (loop for element in list 
               append (mapcar (lambda (l) (cons element l))
                              (allPermutations (remove element list))))))) 
Run Code Online (Sandbox Code Playgroud)

lisp list generator permutation common-lisp

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