Function 如何将变量发送到scheme中的函数?

Function 如何将变量发送到scheme中的函数?,function,variables,scheme,Function,Variables,Scheme,我不熟悉这个计划。当我运行以下代码时 (define lst '(1)) (let ((func1 (lambda lst (begin (display lst) lst)))) (begin (display lst) (func1 lst))) 我得到了(1)((1))”((1)),这意味着在第四行调用时,lst显示为(1),但当将其发送到函数func1时,它变为((1))。这里到底发生

我不熟悉这个计划。当我运行以下代码时

(define lst '(1))

(let ((func1 (lambda lst 
               (begin (display lst)
                      lst))))
  (begin (display lst) 
         (func1 lst)))
我得到了
(1)((1))”((1))
,这意味着在第四行调用时,lst显示为
(1)
,但当将其发送到函数
func1
时,它变为
((1))
。这里到底发生了什么?

(lambda Args E)
的意思是:将此函数的可变长度参数列表绑定到
Args
。例如

(define f (lambda args `(got ,(length args) arguments)))
(display (f 'foo 'bar 'baz))
将打印
(得到3个参数)
。如果将
lambda
表达式更改为

(lambda (lst) (begin (display lst) lst))
;;;     ^---^
然后函数将打印并返回其单个参数。

(lambda Args E)
意味着:将此函数的可变长度参数列表绑定到
Args
。例如

(define f (lambda args `(got ,(length args) arguments)))
(display (f 'foo 'bar 'baz))
将打印
(得到3个参数)
。如果将
lambda
表达式更改为

(lambda (lst) (begin (display lst) lst))
;;;     ^---^

然后,函数将打印并返回其单个参数。

lambda
的形式,当您编写以下内容时:

(lambda x <body>)
。。。声明
x
是单个参数。在问题中,此代码(对于
lambda
中的车身部位,不需要
begin
):

。。。将显示并返回参数列表;如果我们通过
”(1)
,它将计算为
”((1))
:一个包含单个元素的列表,该元素恰好是一个列表

你肯定打算这样做:

((lambda (lst) (display lst) lst) '(1))

。。。它将显示并返回它接收到的单个参数-如果传递
”(1)
,则上述表达式将计算为
”(1)
,即参数本身。

lambda
形式,当您编写以下内容时:

(lambda x <body>)
。。。声明
x
是单个参数。在问题中,此代码(对于
lambda
中的车身部位,不需要
begin
):

。。。将显示并返回参数列表;如果我们通过
”(1)
,它将计算为
”((1))
:一个包含单个元素的列表,该元素恰好是一个列表

你肯定打算这样做:

((lambda (lst) (display lst) lst) '(1))
。。。它将显示并返回它接收到的单个参数-如果传递
”(1)
,上述表达式将计算为
”(1)
,即参数本身。

@Mechanicalsnail:你的意思是?我还没看到呢,谢谢@机械钉:你是说?我还没看到呢,谢谢!