В чистых языках FP вычисления выполняются путем передачи параметров функциям, которые в результате возвращают некоторые значения. Вы можете связать результат test
в функции, которая вызвала test
:
(define (test n)
(define (a1func i)
(if (= i 1) 0
(+ (/ 1 i) (a1func (- i 1)))))
(a1func (- n 1)))
(define (calltest x)
(define (r (test (+ 2 x))))
(- r 4))
Переменные обычно связаны один раз и не могут быть изменены. Функция должна возвращать значение, результат выражения, но (define a1 (a1func(- n 1)))
является скорее определением, а не выражением, поэтому правильный код будет:
(define (test n)
(define (a1func i)
(if (= i 1) 0
(+(/ 1 i) (a1func(- i 1)))))
(define a1 (a1func(- n 1)))
a1)
И поскольку определение переменной и немедленный возврат бессмысленно, более правильный код будет:
(define (test n)
(define (a1func i)
(if (= i 1) 0
(+(/ 1 i) (a1func(- i 1)))))
(a1func(- n 1)))