dotimes
のLispWorks Hyperspecを見ていますが、第3の変数[result-form]
が何をしているのか分かりません。次のような例は:Lispの点を説明する:結果形式は何ですか?
(dotimes (temp-one 10 temp-one)) => 10
(setq temp-two 0) => 0
(dotimes (temp-one 10 t) (incf temp-two)) => T
temp-two => 10
Hyperspecは、その結果、フォームが評価される...
を言います。 result-formが の場合、varはボディが実行された回数にバインドされます。
このことがわかりません。これらの2つの例で第3の変数が必要なのはなぜですか?dotimes
?私は2番目の例で完全にそれを残すことができるように思われ、それは動作します。私の次の例(見つけた場所がわからない)、
(defun thing (n)
(let ((s 0))
(dotimes (i n s)
(incf s i))))
私も同様です。 s
はどのような用途に使用されますか?
あなたの最初の例を取ると、それを展開します:
結果フォームは、ループが完了した後に戻り値(または複数)を生成するよう評価される単なるフォームです。オプションです(省略すると、戻り値は 'NIL'になります)。あなたの最後の例では、 'S'変数は' N'より下のすべての整数の合計を累積するために使われ、ループの終わりに返されます。 – jkiiski