Сумма f (i) для всех целых чисел i =
k, k + 1, .., продолжаясь только так долго
поскольку выполняется условие p (i).
Я иду за:
for (i = 0; i <= V_COUNT; i++) {
sum += sine_coeff[i] * pow(E, e_factor[i]) * sin(
(solar_coeff[i] * solar_anomaly)
+ (lunar_coeff[i] * lunar_anomaly)
+ (moon_coeff[i] * moon_argument)
);
}
на основе следующего общего кода LISP:
(sigma ((v sine-coeff)
(w E-factor)
(x solar-coeff)
(y lunar-coeff)
(z moon-coeff))
(* v (expt cap-E w)
(sin-degrees
(+ (* x solar-anomaly)
(* y lunar-anomaly)
(* z moon-argument)))))))
где сигма:
(defmacro sigma (list body)
;; TYPE (list-of-pairs (list-of-reals->real))
;; TYPE -> real
;; $list$ is of the form ((i1 l1)..(in ln)).
;; Sum of $body$ for indices i1..in
;; running simultaneously thru lists l1..ln.
`(apply '+ (mapcar (function (lambda
,(mapcar 'car list)
,body))
,@(mapcar 'cadr list))))
(полный исходный код см. Исходный код календарных вычислений
Редактировать
Спасибо за все ваши ответы. Исследуя примеры кода, я пришел к выводу, что в терминах программирования, автор действительно подразумевает, что нужно перебрать определенный набор значений. Из этого было легко сделать вывод, что p
должен был возвращать False
, когда у него закончились значения, т. Е. Управление достигло конца списка.