【发布时间】:2015-08-24 20:51:20
【问题描述】:
我对 Racket/Scheme 非常陌生。我知道基本语法。
我写了一个程序,用 list2 做 list1 的笛卡尔积。我使用 Dr Racket 调试了程序。似乎当 l2 变为 null 时,程序不会将 l2 替换为原始列表,即 ol2(这是我想要做的)。
我无法弄清楚为什么会这样。
(define product (lambda (ol2 l1 l2)
(cond
[(and (null? l1) (null? l2)) '()]
[(null? l2) (product ol2 (rest l1) ol2)]
[else (cons (list (first l1) (first l2)) (product ol2 l1 (rest l2)))])))
【问题讨论】:
-
head是first(或car)的别名吗? -
@AlexisKing 是的,它是 head 的别名。为了清楚起见,我已经编辑了代码。
-
尝试使用
(require racket/trace)和(trace-define (product ol2 l1 l2) ...),然后在REPL中运行该函数。这可能有助于使问题更加清晰。 -
ol2是干什么用的? -
当
l1为empty?时,基本情况应该停止,因为当l1变为empty?l2被重置为ol2。