传递给函数的方案列表返回空



我正在尝试定义一个助手函数,该函数以整数和列表为参数,并生成整数和列表的笛卡尔乘积。

我相信我已经弄清楚了逻辑。但是,当我测试代码并将列表传递给函数时,函数会返回一个空列表。

(define (helper element set)
(cond 
((null? set) '())
(cons '(element (car set)) (helper element (cdr set))) 
)
)

例如,当我运行(helper 5'(6 8 9((时,它返回一个空列表。

我不知道为什么,但我认为这与传递一个带列表的整数作为参数有关,但我找不到任何东西来证实这一点。

cond的语法错误。格式为

(cond (test1 then1)
(test2 then2)
...)

最后一个病例不需要检测,这一点没有特殊规定。所以当你写的时候

(cond 
((null? set) '())
(cons '(element (car set)) 
(helper element (cdr set))))

你的测试是符号cons,然后你的表达式是";评估'(element (car set)),丢弃结果,然后评估并返回(helper element (cdr set))";(在condthen部分中的表达式周围存在隐含的begin(。因此,helper最终总是递归到一个空集,然后返回它,对它不做任何更改

相反,你想做的是使用总是正确的东西作为你的最后一个测试,然后使用cons形式作为主体。传统上else用于此,尽管#t也很好:

(define (helper element set)
(cond 
((null? set) '())
(else (cons '(element (car set)) 
(helper element (cdr set))))))

然后,您将发现另一个问题,即您打算构建一个包含element(car set)引用的值的列表,而不是引用该列表。报价和列表有什么区别?会帮助你了解那里在做什么。

试试这个:

(define (helper element set)
(map (lambda(x) (cons element x)) set))

最新更新