Имеется такая задача: написать программу вычисления
значения функции
{ a * (i ^ 2) : если i < 3
f { a * (i ^ 3) + b * i : если 3 <= i <= 7
{ i + 10 * (i ^ 4) : если i > 7
для i [2; 8], изменяется с шагом 1.0
Почитав немного всяческих док, написал вот это:
(define f-funct
(lambda (a b i)
(if (< i 3) (* a (* i i))
(if (< i 8) (+ (* a (* i i i)) (* b i))
(+ i (* 10 (* i i i i)))))))
(define ep-loop
(lambda (a b i)
(if (and (> i 1) (< i 9))
(and (print "f(" a ", " b ", " i ") : " (f-funct a b i))
(ep-loop a b (+ i 1))))))
(define (main argv)
;(let ((a (if (null? (cdr argv)) -0.50 (string->real (cadr argv))))
; (b (if (null? (cddr argv)) 0.70 (string->real (caddr argv)))))
(let ((a -0.50)
(b 0.70))
(ep-loop a b 2)))
Вроде как работает, но хотелось бы узнать где я не прав и
насколько мое C-шное прошлое повлияло на результат ;-)
Покажите, если не трудно, как _правильно_ подобные задачи
решать на scheme/lisp.
Форум —
Development


