Racket编程-创建一个接受两个参数并返回一个函数的函数
编写一个名为compare的Racket函数,它接受两个参数,函数f和g,每个函数接受一个整数参数 compare返回一个参数的函数,一个整数n。返回的函数计算值f(n)>g(n)。例如: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
>(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