私はLispが初めてです。整数である 2 つの引数 x と y を取り、x から始まり y で終わる整数のリストを返す x2y という名前の関数を作成しようとしています。
(defun xtoy (X Y)
(cond ((> X Y) (list nil))
((= X Y) (list Y)))
(T (append (list X) x2y(+ 1 X) Y)))))
私はLispが初めてです。整数である 2 つの引数 x と y を取り、x から始まり y で終わる整数のリストを返す x2y という名前の関数を作成しようとしています。
(defun xtoy (X Y)
(cond ((> X Y) (list nil))
((= X Y) (list Y)))
(T (append (list X) x2y(+ 1 X) Y)))))
elisp では、 を探していますC-hf number-sequence
RET。
abo-abo のバージョンから始めて、多くのことを単純化できます。
1) (= XY) を取り除き、(list nil) を (> XY) の nil に置き換える
(defun xtoy (X Y)
(cond ((> X Y) nil)
(t (append (list X) (xtoy (+ 1 X) Y)))))
2)ステートメントに単純化cond
するif
(defun xtoy (X Y)
(if (<= X Y)
(append (list X) (xtoy (+ 1 X) Y))
nil))
3) finalnil
を省略します。これは、条件が一致しない場合に暗黙的に返されるものであるためです。
(defun xtoy (X Y)
(if (<= X Y)
(append (list X) (xtoy (+ 1 X) Y))))
4)cons
の代わりに使用append
(defun xtoy (X Y)
(if (<= X Y)
(cons X (xtoy (+ 1 X) Y))))