今日はクラスでループについて説明しましたが、やらなければならないことがいくつかあります。簡単に言えば、再帰の代わりにループを使用してリストを作成する必要があります。私はここでつまずきにいるようです。この例では、単純なカウントダウンを行う必要があります。この関数は引数を取り、最初の引数以下のすべての正の整数のリストを返します。(カウントダウン 5) => (5 4 3 2 1)
なんらかの理由でループを取得するのに苦労しています。私たちが話したのは、Loop、Do、Dotimes、および Dolist です。私はこれをいくつかのループで試しましたが、常に同様の結果になります。
(defun countdown (num)
(cond ((= num 0) nil)
(T (let* ((list nil))
(loop
(if (= num 0) (return list)
(setf list (cons list num)))
(setf num (- num 1)))))))
私の出力は次のように表示されます。
(((((NIL . 5) . 4) . 3) . 2) .1)
更新:問題を解決しました。どうやら の順序を逆にする必要があったようで、 のcons前numに来listます。誰かがこれを説明したいですか?リストを最初に置いてから、2番目に置いたものが最後に追加されると思いました。少なくとも、私はこれまで問題なく使用してきました。