私はスキームにまったく慣れていないので、(1 2 3 4) のようなリストを取り、(4 1 2 3) を返す関数に送信したいと考えています。2 回目の実行では (3 4 1 2) が返され、関数の呼び出しごとに右シフトされたリストが作成されます。
この問題を解決するために私が見つけた最初の方法は、リストの最初と最後の値を再帰的に交換することです。したがって、スキームでは、リストのcarにリストのcdrを追加し、最後のスワップが1つだけになるまで、リストのcdrを関数に再帰的に送り返します。
しかし、私は再帰関数を作成するのが苦手で、スキームなどの新しい言語でそれを行うのに苦労しています。これは、私がどこに向かいたいかのアイデアを与えるためにこれまで試みてきたことです。
(define (rShift lst)
(if (null? lst)
'()
(append (cdr lst (car lst))(rShift (cdr lst)))))