Код Ревью
Сравни свои решения
;Разворот списка на месте,
;Т.к. в racket по умолчанию используется стратегия вычислений "вызов по значению", то изменения происходят в копии списка
;Т.е. исходный список не изменяется, но при этом возвращается измененный
(define (reverse! l)
(define (loop i j)
(if (null? i)
j
(let ([k (cdr i)])
;(set-cdr! i j) ;что-то ругается на это
(loop k i))))
(loop l null))
;Было: v: [ 1 | & ] -> [ 2 | & ] -> [ 3 | \0]
;Стало: v: [ 1 | & ] -> [ 2 | & ] -> [ 3 | \0] w: [ 3 | & ] -> [ 2 | & ] -> [ 1 | \0]
;Разворот списка на месте,
;Т.к. в racket по умолчанию используется стратегия вычислений "вызов по значению", то изменения происходят в копии списка
;Т.е. исходный список не изменяется, но при этом возвращается измененный
(define (reverse! l)
(define (loop i j)
(if (null? i)
j
(let ([k (cdr i)])
;(set-cdr! i j) ;что-то ругается на это
(loop k i))))
(loop l null))
;Было: v: [ 1 | & ] -> [ 2 | & ] -> [ 3 | \0]
;Стало: v: [ 1 | & ] -> [ 2 | & ] -> [ 3 | \0] w: [ 3 | & ] -> [ 2 | & ] -> [ 1 | \0]
;Разворот списка на месте,
;Т.к. в racket по умолчанию используется стратегия вычислений "вызов по значению", то изменения происходят в копии списка
;Т.е. исходный список не изменяется, но при этом возвращается измененный
(define (reverse! l)
(define (loop i j)
(if (null? i)
j
(let ([k (cdr i)])
;(set-cdr! i j) ;что-то ругается на это
(loop k i))))
(loop l null))
;Было: v: [ 1 | & ] -> [ 2 | & ] -> [ 3 | \0]
;Стало: v: [ 1 | & ] -> [ 2 | & ] -> [ 3 | \0] w: [ 3 | & ] -> [ 2 | & ] -> [ 1 | \0]
;Разворот списка на месте,
;Т.к. в racket по умолчанию используется стратегия вычислений "вызов по значению", то изменения происходят в копии списка
;Т.е. исходный список не изменяется, но при этом возвращается измененный
(define (reverse! l)
(define (loop i j)
(if (null? i)
j
(let ([k (cdr i)])
;(set-cdr! i j) ;что-то ругается на это
(loop k i))))
(loop l null))
;Было: v: [ 1 | & ] -> [ 2 | & ] -> [ 3 | \0]
;Стало: v: [ 1 | & ] -> [ 2 | & ] -> [ 3 | \0] w: [ 3 | & ] -> [ 2 | & ] -> [ 1 | \0]