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:你的意思是?我还没看到呢,谢谢@机械钉:你是说?我还没看到呢,谢谢!