Лямбда-выражение, которое принимает функцию (одного аргумента) и число, и применяет функцию к удвоенному числу.Как написать этот код Lisp/Scheme?
5
A
ответ
8
Применяя функцию в два раза числа:
(lambda (f x) (f (* 2 x)))
Применение функции к числу дважды (это то, что вы, возможно, намеревался спросить): ответ
(lambda (f x) (f (f x)))
5
Грега является правильным, но вы можете подумать о том, как вы можете разбить эту проблему, чтобы найти ответ самостоятельно. Вот один подход:
; A lambda expression
;(lambda())
; which takes a function (of one argument) and a number
;(lambda (fun num))
; and applies the function
;(lambda (fun num) (fun num))
; to twice the number
;(lambda (fun num) (fun (* 2 num)))
((lambda (fun num) (fun (* 2 num))) + 12)
2
Вот еще один способ приблизиться к нему:
Написать контракта, цель и заголовок:
;; apply-double : function -> number -> any
;; to apply a given function to double a given number
(define (apply-double fun num) ...)
Написать некоторые тесты:
(= (apply-double identity 10) 20)
(= (apply-double - 15) -30)
(= (apply-double/7) 1/14)
Определите эту функцию:
(define (apply-double fun num)
(fun (* 2 num)))
Это аббревиатура рецепта здесь: http://www.htdp.org/2003-09-26/Book/