Scheme 将参数重新绑定到方案中的函数调用>;
我对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)))
(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”)