【问题标题】:Racket Programing - creating a function that takes two arguments and returns a function球拍编程 - 创建一个接受两个参数并返回一个函数的函数
【发布时间】:2021-02-25 06:11:09
【问题描述】:

编写一个名为 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))))))

【问题讨论】:

    标签: racket


    【解决方案1】:

    编写一个名为 compare 的 Racket 函数...

    (define compare ...
    

    ...接受两个参数,函数 f 和 g,每个接受一个整数参数。

    (define compare
      (lambda (f g)
        ...
    

    ...compare 返回一个有一个参数的函数,一个整数 n。

    (define compare
      (lambda (f g)
        (lambda (n)
          ...
    

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

    (define compare
      (lambda (f g)
        (lambda (n)
          (> (f n) (g n)))))
    

    【讨论】:

    • 或者(更简洁)(define (compare f g) ...)
    【解决方案2】:

    我认为在某些时候你需要call 你的函数fg

    您还需要在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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 2014-01-02
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多