Racket编程-创建一个接受两个参数并返回一个函数的函数

Racket编程-创建一个接受两个参数并返回一个函数的函数,racket,Racket,编写一个名为compare的Racket函数,它接受两个参数,函数f和g,每个函数接受一个整数参数 compare返回一个参数的函数,一个整数n。返回的函数计算值f(n)>g(n)。例如: >(define double (lambda (n) (* n 2))) >(define square (lambda (n) (* n n))) >(define 2n+1 (lambda (n) (add 1 (double n))) >((compare square d

编写一个名为compare的Racket函数,它接受两个参数,函数f和g,每个函数接受一个整数参数

compare返回一个参数的函数,一个整数n。返回的函数计算值f(n)>g(n)。例如:

>(define double (lambda (n) (* n 2))) 
>(define square (lambda (n) (* n n)))
>(define 2n+1 (lambda (n) (add 1 (double n)))

>((compare square double) 2)    ; is (2*2) > (2*2)?
#f
>((compare square double) 5)    ; is (5*5) > (5*2)?
#t
以下是我到目前为止的情况:

(define compare
  (lambda (f g)
    (lambda (int)
      (lambda (int-two)
          (>= (f g))))))
编写一个名为compare的Racket函数

…它接受两个参数,函数f和g,每个函数接受一个整数参数

…compare返回一个参数的函数,一个整数n

…返回的函数计算值f(n)>g(n)

编写一个名为compare的Racket函数

…它接受两个参数,函数f和g,每个函数接受一个整数参数

…compare返回一个参数的函数,一个整数n

…返回的函数计算值f(n)>g(n)


我认为您需要在某些时候调用函数
f
g

您还需要在
f
中提供函数
double
,在
g
中提供函数
square
,以满足您的条件
=

您可以在
Racket
解释器中尝试以下代码:

(define double (lambda (n) (* n 2))) 
(define square (lambda (n) (* n n)))

(define compare
  (lambda (f g)
    (lambda (int)
       (printf "F:~A G:~A Condition:~A~%" (f int) (g int) (>= (f int) (g int)))
       (>= (f int) (g int)))))

(let ((compare-function (compare double square)))
  (printf "Result 1: ~A~%" (compare-function 2))
  (printf "Result 2: ~A~%" (compare-function 5)))
应提供以下结果:

F:4 G:4 Condition:#t
Result 1: #t
F:10 G:25 Condition:#f
Result 2: #f

我认为您需要在某些时候调用函数
f
g

您还需要在
f
中提供函数
double
,在
g
中提供函数
square
,以满足您的条件
=

您可以在
Racket
解释器中尝试以下代码:

(define double (lambda (n) (* n 2))) 
(define square (lambda (n) (* n n)))

(define compare
  (lambda (f g)
    (lambda (int)
       (printf "F:~A G:~A Condition:~A~%" (f int) (g int) (>= (f int) (g int)))
       (>= (f int) (g int)))))

(let ((compare-function (compare double square)))
  (printf "Result 1: ~A~%" (compare-function 2))
  (printf "Result 2: ~A~%" (compare-function 5)))
应提供以下结果:

F:4 G:4 Condition:#t
Result 1: #t
F:10 G:25 Condition:#f
Result 2: #f
或者(更简洁地),
(定义(比较f g)
或者(更简洁地),
(定义(比较f g)…)
(define double (lambda (n) (* n 2))) 
(define square (lambda (n) (* n n)))

(define compare
  (lambda (f g)
    (lambda (int)
       (printf "F:~A G:~A Condition:~A~%" (f int) (g int) (>= (f int) (g int)))
       (>= (f int) (g int)))))

(let ((compare-function (compare double square)))
  (printf "Result 1: ~A~%" (compare-function 2))
  (printf "Result 2: ~A~%" (compare-function 5)))
F:4 G:4 Condition:#t
Result 1: #t
F:10 G:25 Condition:#f
Result 2: #f