Lambda 如何编写输出函数的过程?(球拍)

Lambda 如何编写输出函数的过程?(球拍),lambda,functional-programming,lisp,scheme,racket,Lambda,Functional Programming,Lisp,Scheme,Racket,如何编写输出函数的过程?(球拍) 这个过程会输出一个lambda吗?我希望我没有太过分: (define answer (lambda (question) (lambda (answer) `((question: ,question) (answer: ,answer))))) 然后尝试: >((用回答回答“问题”) 在REPL.中,另一种方法也可以这样做: (define (output-function) (define (f x)

如何编写输出函数的过程?(球拍)


这个过程会输出一个lambda吗?

我希望我没有太过分:

(define answer
  (lambda (question)
    (lambda (answer)
      `((question: ,question)
        (answer: ,answer)))))
然后尝试:

>((用回答回答“问题”)


在REPL.

中,另一种方法也可以这样做:

(define (output-function)
  (define (f x)
    x)
  f)
你可以这样测试它:

(define test (output-function))
(test 10) ; returns 10

这样想吧。从函数中输出数字很容易:

(define (output-num x) 7)
我们还可以预定义输出:

(define num 7)
(define (output-num x) num)
现在很容易看到如何输出函数——只需在正文中引用它

(define (a-function x) "hello")
(define (output-function y) a-function)
而且,就像文字数字一样,我们可以使用
lambda
,在定义体中编写函数:

(define (output-function y) (lambda (x) "hello"))

你的意思是:我如何使用高阶函数来产生另一个函数?如果是这样,请看以下内容:

(lambda (f) (lambda (x) (f x)))
它的作用是:

1:创建以“f”作为参数初始化的匿名闭包

2:在第一个主体的范围内,创建一个以“x”作为参数的闭包

3:将f应用于x(f是x顶部的封口)

这意味着(在计算(fx)之前),f被声明为一个以x为参数的函数。将f应用于x是整个表达式返回的结果:在本例中,除了闭包之外,我们没有分配任何值,所以没有什么结果

使用此作为开始点,考虑当闭包返回另一个闭包时会发生什么:内部闭包在Outter闭包在它的身体周围传递其值之后进行评估。它被称为延迟评估(delayedevaluation),允许一个人将过程作为值传递,以便内部过程稍后可以扩展

这里有一个具体的例子,说明这是多么有益。让我们仅使用高阶函数(闭包)定义cons、car和cdr:

要理解这一点,请传递定义,但请记住(define(foo-bar)…)意味着(define-foo(lambda(bar)…)…。

那么,“Scheme中的函数是什么?”?这与“程序”有何不同?或者更确切地说,“什么是程序”?回答这些问题就像。。。98%的答案:)
(define (cons kar kdr) (lambda (kons) (kons kar kdr)))
(define (car kons) (kons (lambda (kar kdr) kar)))
(define (cdr kons) (kons (lambda (kar kdr) kdr)))