2016-03-22 9 views
-2

この関数には1つのパラメータ、整数があります。 たとえば、rot-left(2 '(1 2 3 4 5))(3 4 5 1 2)rot-right(2 '(1 2 3 4 5))(5 4 1 2 3)を返す必要があります。リストのn個の要素をlispで左右に回転させる再帰関数

私はこれを試しました...それは動作しませんが、それは何をすべきかは、リストの最後のn個の要素を空のリストに追加することです。

(defun rot_left (n l) 
    (if (zerop n) 
     '() 
     (append (last l) 
       rot-left ((- n 1) (cdr l))))) 
+1

次に、この解釈が正しいとすると、関数は、反復または再帰を使用せず、唯一のCommon Lispでは、プリミティブの演算子を用いて書き込むことができますか? StackOverflowでは、コードを記述しません。私たちは立ち退かれた人を喜んで助けますが、まず自分自身を試してください。さらに、これは13歳での宿題でした。 – SZenC

+0

これを試しました...うまくいきませんが、リストの最後のn個の要素を空のリストに追加するだけです。 –

+1

これを含めるように質問を編集してください。それ以外は何もしないでください(あなたの質問を編集してください。あなたは試しました – SZenC

答えて

0

Iは機能rot-right(rot-right 2 '(1 2 3 4 5))(4 5 1 2 3)としない(5 4 1 2 3)を生成する必要があり、右から左にリストの要素を回転させる必要がある場合、と仮定して溶液を与えます。あなたがこれまでに試してみました何

(defun rot-left(n l) 
    (append (nthcdr n l) (butlast l (- (length l) n)))) 

(defun rot-right(n l) 
    (rot-left (- (length l) n) l)) 

(defvar a '(1 2 3 4 5)) 

(rot-left 2 a) ; produces (3 4 5 1 2) 
(rot-right 2 a) ; produces (4 5 1 2 3) 
+0

関数は再帰的でなければなりません。執行役員は何をしていますか?私は本当にあまり知りませんので、リストには新しいです。 –

関連する問題