[Scheme] Modyfikowanie listy w "dziwnym" algorytmie

0

Witam,

otóż mam zadanie i chciałbym Was prosić, byście troszkę mi pomogli z moim problemem:) Oŧóż jak wiemy, w języku Scheme nie ma iteracji. Czy mógłby mi ktoś przedstawić algorytm albo napisać program, (chociaż wolałbym to pierwsze!) by zrobić poniższe zadania:

  • (szyfr_1 lista n) - funkcja "przepisuje" listę w kolejności"

    1, n+1, 2n+1, 3n+1, kn+1, 2, n+2, 2n+2, 3n+2, kn+2, 3, n+3, 3*n+3 ..., n, 2n, 3n, ..., m
    gdzie k = m / n - 1. Dla ułatwienia zakładamy, że długość wejściowej listy m jest podzielna przez n oraz n >= 1.

* (szyfr_2 lista n) - funkcja "przepisuje" listę w taki sposób, że odwraca kolejne bloki o długości n >= 1. Dla ułatwienia zakładamy, że długość wejściowej listy m jest podzielna przez n.

I ma dawać to takie efekty:

(define f (lambda (x) (* 2 x)))
(display (szyfr_1 '(1 2 3 4 5 6) 2)) (newline)
(display (szyfr_2 '(1 2 3 4 5 6) 3)) (newline)

takie mam zadanie i nie wiem jak się za to ugryźć. W ogóle rekurencja to zło i przeżytek, bo o ile da się prosto napisać takie zadanie iteracyjnie (aż prosi się o while!), to muszę męczyć swój musk czymś takim.

Płacę złotymi browarami!!

Z góry dzięki za pomoc:D

0
boróweczka napisał(a)

W ogóle rekurencja to zło i przeżytek, bo o ile da się prosto napisać takie zadanie iteracyjnie (aż prosi się o while!), to muszę męczyć swój musk czymś takim.

Zło i przeżytek :D To napisz iteracyjnie to w C++ na listach, przerobi się na rekurencję... While to zwykła rekurencja ogonowa, zamiast while na początku masz nazwę funkcji na końcu, cała filozofia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1