Scheme 将参数重新绑定到方案中的函数调用>;

Scheme 将参数重新绑定到方案中的函数调用>;,scheme,Scheme,我对scheme有点陌生,我正在尝试编写一个函数,它接受函数名和表达式,并将函数名绑定为表达式的第一个参数 即: 比如: (bind-function-name '+ '(param 'a "First")) 将生成一个lambda,用于计算 (param '+ 'a "First") 到目前为止,我想到的最好的方法是: (define (bind-function-name name cmd) (let ((func (car cmd)) (args (cdr cmd)))

我对scheme有点陌生,我正在尝试编写一个函数,它接受函数名和表达式,并将函数名绑定为表达式的第一个参数

即:

比如:

(bind-function-name '+ '(param 'a "First"))
将生成一个lambda,用于计算

(param '+ 'a "First")
到目前为止,我想到的最好的方法是:

(define (bind-function-name name cmd) 
  (let ((func (car cmd)) (args (cdr cmd)))
    (lambda ()
      (apply func (cons name args)))))
这似乎不起作用,因为它抱怨函数名是一个符号


我相信这很简单,但我只是遗漏了一些东西,以为有人能帮我解决。

首先:你把代码和数据混在一起了。它在设计上很相似,但不一样。 第二:表达式没有第一个参数。只有函数调用有第一个参数

因此,我们不讨论表达式,而是讨论带有参数列表的函数。如果你有一个函数和一个参数列表,写一个绑定函数是很容易的,它用一个修改过的参数列表调用原始函数。是这样做的:

这是一个旧函数,它接受一些参数并执行任何操作 与他们一起:

(define (old-func . args)
  (display "old-func: ")
  (write args)
  (newline))

(old-func 1 2 3) -> old-func: (1 2 3)
这是bind函数,它接受旧函数和新函数 第一个参数,并返回一个调用旧函数的新函数 使用修改后的参数列表

(define (bind-func first-arg old-func)
  (lambda args
    (apply old-func (cons first-arg args))))
这就是它的工作方式:

(define new-func (bind-func "new" old-func))
(new-func 1 2 3) -> old-func: ("new" 1 2 3)

可以将其称为
(bind function name'+(list param'a“First”)
?这确实有效,有没有办法将其与引用的第二个参数一起使用以减少其冗长性?好的,您可以始终使用准旋转:
`(,param a“First”)