リスト反転
目を潤ませてこっちをみないでくれ。
京アニ智代アフターをBGVにしてたら死にそうだ。何このソープ。もうやだ。
俺は信じません。
リスト反転は標準装備だけど練習
;;;だいぶなれてきたがしんどいな (define (reverse-tail ls) (let loop((ls ls) (rls '()) (tmp '()) );ls:対象 rls:反転 tmp:反復用 ;lsがもはや空なら反転させたrlsを出力して抜ける抜ける (if (null? ls) rls (begin (set! tmp (cdr ls)) ;次のステップのためにとりあえずcdrをtmpにいれておく。 (set-cdr! ls rls) (loop tmp ls '() ) ) ) ) ) ;ぐちゃぐちゃや。たぶんbeginいらん。ついでにtmpが迂遠 (define (reverse-tail2 ls) (let loop((ls ls) (rls '()) ;(tmp '()) );ls:対象 rls:反転 tmp:反復用 ;lsがもはや空なら反転させたrlsを出力して抜ける抜ける (if (null? ls) rls ; (begin (let ((tmp '() )) (set! tmp (cdr ls)) ;次のステップのためにとりあえずcdrをtmpにいれておく。 (set-cdr! ls rls) (loop tmp ls ))) ) ) ;;;清書 (define (reverse-tail3 ls) (let loop((ls ls) (rls '()));ls:対象 rls:反転 (if (null? ls) rls ;lsがもはや空なら反転させたrlsを出力して抜ける抜ける (let ((tmp '() )) ;tmp:反復用 (set! tmp (cdr ls)) ;次のステップのためにとりあえずcdrをtmpにいれておく。 (set-cdr! ls rls) (loop tmp ls ))))) ;;;確認 (reverse-tail '(1 2 3 4 5)) ;ok (reverse-tail2 '(1 2 3 4 5)) ;ok (reverse-tail3 '(1 2 3 4 5)) ;ok ;define,名前付きlet,set!,set-cdr!,再帰とかその辺か
updated Fri Jul 18 12:54:11 2008