我正在尝试获取两个列表之间的交叉产品。我可以看到问题在于它尝试使用(CP2 T1 T2)
附加(CP2 T1 T3)
。我已经想到了其他方法,例如(CP2 (CP2 T1 T2) ...)
,但是,省略号只会扩展为不需要的输出。
(define-syntax CP
(syntax-rules ()
((CP T1 T2 ...)
(append (CP2 T1 T2) ...)
)
)
)
(define (CP2 T1 T2)
(foldr append '() (map (λ(x)
(map (λ(y) (append x y)) T2))
T1))
)
根本不可能这样做吗?
谢谢。
答案 0 :(得分:0)
也可以使用其中一个for循环(http://docs.racket-lang.org/reference/for.html):
(define (myproduct l1 l2)
(for*/list ((i l1)(j l2))
(list i j)))
(myproduct '(1 2 3) '(a b c))
输出:
'((1 a) (1 b) (1 c) (2 a) (2 b) (2 c) (3 a) (3 b) (3 c))