-2

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

4 に答える 4

3

elisp では、 を探していますC-hf number-sequence RET

于 2013-10-22T20:57:40.613 に答える
2

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))))
于 2013-10-22T21:35:36.310 に答える