私は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))))