oorafalekoo napisał(a)
(define (select-even-items lst)
(letrec ((select-even-items
(lambda (lst index)
(if (null? lst)
0
(let ((head (car lst)) (tail (cdr lst)))
(if (even? index)
(cons head (select-even-items tail (+ 1 index)))
(select-even-items tail (+ 1 index))))))) ) (select-even-items lst 1)))
poprawilem kod na w ten sposob niby sie kompiluje ale jak wczytuje listę to mam błąd cons: second argument must be of type <list or="or" cyclic="cyclic" list="list">, given 6 and 0
Ech, ciężki przypadek, napisałem przecież "nie skopiowałem wszystkich nawisów ... kod jest prawidłowo sformatowany", miałeś dostawić nawiasy zgodnie z formatowaniem. cons
przyjmuje dwa argumenty, ileś Ty tego naładował, dostawiałeś te nawiasy byle się ilościowo zgadzały? Mniej "dydaktyczna" wersja działa, wzorując się na niej nie powinieneś mieć problemu z prawidłowym dostawieniem nawiasów. Prosiłem żebyś przeanalizował kod i postarał się zrozumieć.
oorafalekoo napisał(a)
to na koncu select even- items lst 1 po co jest?
Po to jest bo zdefiniowaliśmy lokalną funkcję, która realizuje wszystkie operacje, jakoś trzeba ją odpalić. Wszystkie funkcje, z wyjątkiem my-map
, korzystają z funkcji pomocniczych w identyczny sposób, widać nie wyciągnąłeś wniosków.
(define (select-even-items lst)
(letrec ((select-even-items
(lambda (lst is-even-item)
(if (null? lst)
()
(let ((head (car lst)) (tail (cdr lst)))
(if is-even-item
(cons head (select-even-items tail #f))
(select-even-items tail #t)))))
(select-even-items lst #f)))
Programowanie nie polega na klepaniu na ślepo, naucz się tego raz na zawsze. Scheme używacie po to żeby nauczyć się rozwiązywania problemów przy użyciu wyłącznie podstawowych konstrukcji, bez przykładania wagi do języka. Co to za uczelnia?