對於所有整數i(= i = k,k + 1,...)的f(i)的總和,只有當條件p(i)成立時才持續爲 。如何以編程的方式寫下這個數學表達式?
我要去爲:
(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))))
(完整的源代碼
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)
);
}
基於以下的Common Lisp代碼
,見Calendrical calculations source code
編輯 感謝您的所有答案。研究代碼示例,我得出結論,在編程方面,作者確實認爲必須循環一定的值。由此可以很容易得出結論,p
在其值已經用完時不得不返回False
,即控制已經到達列表的末尾。
當你已經將Common Lisp代碼放在眼前時,你的意思是「我該如何編程編寫這個程序」?侮辱:) – 2011-01-09 17:37:32
大聲笑,是的,這確實是一個語言失敗的問題,因爲我已經有了它編程;)我沒有問「如何將其翻譯成語言x」的原因是因爲我試圖瞭解實際發生了什麼這裏。 – 2011-01-09 17:43:18