(1 2 3 4 5)が与えられたとき( (1 2) (2 3) (3 4) (4 5) )を返すような関数の定義
リスト処理の問題。
1. (1 2 3 4 5) が与えられたとき ( (1 2)(2 3)(3 4)(4 5) ) を返すような関数を定義せよ
vallog: [1,2,3,4,5] が与えられたとき [[1,2][2,3][3,4][4,5]] を返すような関数を定義せよ
2. 1 の関数を拡張して、(0 1 2 3 4 5 6 7 8 9) と 2 が与えられたとき ( (0 1)(1 2)(2 3)(3 4)(4 5)(5 6)(6 7)(7 8)(8 9) ) を、(0 1 2 3 4 5 6 7 8 9) と 3 が与えられたとき ( (0 1 2) (2 3 4) (4 5 6) (6 7 8) (8 9) ) を、(0 1 2 3 4 5 6 7 8 9) と 4 が与えられたとき ( (0 1 2 3) (3 4 5 6) (6 7 8 9) ) を返すような関数を定義せよ
おもしろそうなので、回答見ないでやってみた。
1.はやってみたけど、保存するの忘れたので2.だけ。
(use util.list) (define (overlap-slices ls n) (define overlapped-list (let loop ((i 0) (new '()) (rest ls)) (define (overlapped? cur) (and (not (= cur 0)) (= (remainder (+ cur 1) n) 0))) (let ((cur (car rest))) (cond ((null? (cdr rest)) (append new (list cur))) ((overlapped? i) (loop 1 (append new (list cur) (list cur)) (cdr rest))) (else (loop (+ i 1) (append new (list cur)) (cdr rest))))))) (slices overlapped-list n))
実行
(overlap-slices '(a b c d e f g) 3) ;; ((a b c) (c d e) (e f g)) (overlap-slices '(a b c d e f g) 4) ;; ((a b c d) (d e f g))
OK。
ということで回答見てみる。
うん。全然違うw
すっきりしてますな。