【发布时间】:2016-04-24 12:09:08
【问题描述】:
我正在尝试编写以下函数,该函数获取 2 个列表并返回这些列表的笛卡尔积。
这是我写的:
;; Signature: mix-rows(rows1 rows2)
;; Purpose: returns a list of rows of the cartesian product of both rows
;; Type: [ List(Row) * List(Row) -> List(Row) ]
;; Tests:
;; (mix-rows (list '(10 11) '(20 21)) (list '('u 'v) '('p 'q)))
;; ==> ((10 11 'u 'v)
;; (10 11 'p 'q)
;; (20 21 'u 'v)
;; (20 21 'p 'q))
(define mix-rows
(lambda (rows1 rows2)
(map (lambda (row1)
(foldr (lambda (row2)
(append row1 row2))
'()
rows2))
rows1)))
由于某种原因,最后一个 lambda 无法识别从遍历 rows1 的函数映射中给出的 row1。
我希望最后一个 lambda 遍历 rows2 并将每个元素附加到 row1 并且在附加所有 rows2 元素之后 row1 将更改为 rows1 中的下一个元素。
为什么 lambda 不能识别 row1?
谢谢。
【问题讨论】:
-
您可能不打算双引号
uvpq,只需使用'(u v)和'(p q),它们是(list (quote u) (quote v))和(list (quote p) (quote q))的糖化版本
标签: dictionary scheme closures racket fold