Я ранее спрашивал о letrec и хвостовой рекурсии, я лучше понял letrec и хвостовую рекурсию из ответов, моя конечная цель заключается в том, чтобы реализовать код схемы для уравнения: например, y (i) = x (i) + 2, где x (i), y (i) - списки, поэтому они будут хвостовой рекурсией с i. теперь x, y, i будут в хвостовой рекурсивной подпрограмме, поэтому для этой части код будет: но 5 всегда будет одинаковым (не рекурсивным), но вы можете выбрать это постоянное число в качестве входного параметра, скажем, «константа»
поэтому ожидаемый результат, например когда вы попробуете это: (equalFunc 0 3 1 (lambda (x) x) 5)
это должно работать так ... ((0 1 2) (0 + 5 1 + 5 2 + 5))
окончательный ожидаемый результат: ((0 1 2) (5 6 7))
потому что он вычислит уравнение y (i) = x (i) + 5 (с границей i от 0 до 2 - так что x (i), y (i) должны быть рекурсией), но не «+ 5». Я просто не мог подумать, что делать с «+5» в подпрограмме рекурсии хвоста функции.
Я думаю, что такой код ... но да, он не работает ...
(define equationFunc
(lambda (start end res func constant)
(letrec (helper
(lambda (x i y constant)
(if (>= i start)
(helper (cons i (+ x constant))
(- i res)
(cons (func i) y)
0)
(cons x (cons y '()))
)
)
)
(helper '() end '() 0)
)))
кто-нибудь может дать совет?
funcдолжен делать? Какова цельaиzвequationFunc? потому что вы не используете их во вспомогательной процедуре. И если я вызову функцию с такими параметрами:(equationFunc 0 3 1 identity 5)какой результат вы ожидаете? - person Óscar López   schedule 25.05.2014