List Scheme-传递到函数的列表返回空

List Scheme-传递到函数的列表返回空,list,parameters,scheme,List,Parameters,Scheme,我试图定义一个helper函数,它将整数和列表作为参数,并生成整数和列表的笛卡尔乘积 我相信我已经弄明白了逻辑。但是当我测试代码并将列表传递给函数时,函数返回一个空列表 (define (helper element set) (cond ((null? set) '()) (cons '(element (car set)) (helper element (cdr set))) ) ) 例如,当我运行(helper5’(689))

我试图定义一个helper函数,它将整数和列表作为参数,并生成整数和列表的笛卡尔乘积

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

    (define (helper element set)
    (cond 
        ((null? set) '())
        (cons '(element (car set)) (helper element (cdr set))) 
    )
)
例如,当我运行(helper5’(689))时,它返回一个空列表

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

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

您对
cond
的语法错误。格式是

(cond (test1 then1)
      (test2 then2)
      ...)
最后一个案例不需要测试,这没有特别的限制。所以当你写作的时候

  (cond 
    ((null? set) '())
    (cons '(element (car set)) 
          (helper element (cdr set))))
您的测试是符号
cons
,然后表达式是“evaluate
”(元素(车集))
,将结果扔掉,然后求值并返回
(helper元素(cdr集))
(在
cond
部分的表达式周围有一个隐式的
begin
)。因此,
helper
最终总是递归到一个空集,然后返回它,不做任何更改

你想做的是,在你的最后一次测试中使用一些总是正确的东西,然后使用
cons
表单作为主体。传统上,
else
用于此,尽管
#t
也可以:

(define (helper element set)
  (cond 
    ((null? set) '())
    (else (cons '(element (car set)) 
                (helper element (cdr set))))))
然后,您将发现另一个问题,即您打算构建一个包含
元素
(汽车套件)
引用的值的列表,而不是引用该列表。将帮助您了解上面的内容。

尝试以下操作:

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

谢谢你。在本例中,我试图避免使用lambda表达式。但这也很有效。