(1) 数を要素とするリストを入力とし、各要素を2乗して、その合計値を返す関数 sum2 を作成せよ。
(2) リストの要素数を数える関数 size を作成せよ。例えば (list 1 2 3 'ok 'ng) を入力すると 5 を返す。
(define sum2 (lambda (lst) (if (null? lst) 0 (+ (* (car lst) (car lst)) (sum2 (cdr lst)))))) (define size (lambda (lst) (if (null? lst) 0 (+ 1 (size (cdr lst)))))) |
(1) 数を要素とするリストを入力とし、各要素を2乗したリストを返す関数 pow2-list を作成せよ。例えば (list 1 2 3 4) を入力すると (list 1 4 9 16) を返す。
(2) 数を要素とするリストと数 d を入力とし、リストの各要素について d で割った余りを求める関数 mod-list を作成せよ。例えば (list 1 2 3 4 5 6 7) と 3 を入力すると (list 1 2 0 1 2 0 1) を返す。なお、modulo により余りを計算できる。
(define pow2-list (lambda (lst) (if (null? lst) () (cons (* (car lst) (car lst)) (pow2-list (cdr lst)))))) (define mod-list (lambda (lst d) (if (null? lst) () (cons (modulo (car lst) d) (mod-list (cdr lst) d))))) |
(1) 2つのリスト lst1、lst2 を入力とし、lst1 の後に lst2 を接続したリストを返す関数 cat-list を作成せよ。例えば (list 1 2 3) と (list 4 5 6) を入力すると (list 1 2 3 4 5 6) を返す。
(2) 2つのリスト lst1、lst2 を入力とし、リストの要素を交互に要素とするリストを返す関数 merge-list を作成せよ。例えば (list 1 2 3) と (list 4 5 6) を入力すると (list 1 4 2 5 3 6) を返す。また、(list 1 2 3) と (list 4 5 6 7 8 9) を入力すると (list 1 4 2 5 3 6 7 8 9) を返す。
(define cat-list (lambda (lst1 lst2) (if (null? lst1) lst2 (cons (car lst1) (cat-list (cdr lst1) lst2))))) (define merge-list (lambda (lst1 lst2) (cond ((null? lst1) lst2) ((null? lst2) lst1) (else (cons (car lst1) (merge-list lst2 (cdr lst1))))))) |
; (1) (define max-list (lambda (lst) (define max-list00 (lambda (lst max) (if (null? lst) max (if (> (car lst) max) (max-list00 (cdr lst) (car lst)) (max-list00 (cdr lst) max))))) (max-list00 (cdr lst) (car lst)))) ; (2) (define variance-list (lambda (lst) (define pow2 (lambda (x) (* x x))) (define ave1 (lambda (lst s n) (if (null? lst) (/ s n) (ave1 (cdr lst) (+ s (car lst)) n)))) (define ave2 (lambda (lst s n) (if (null? lst) (/ s n) (ave2 (cdr lst) (+ s (pow2 (car lst))) n)))) (- (ave2 lst 0 (length lst)) (pow2 (ave1 lst 0 (length lst)))))) ; (3) (define entropy (lambda (lst) (define log2 (lambda (x) (/ (log x) (log 2)))) (define plogp (lambda (p) (* p (log2 p)))) (define sum-plogp (lambda (lst s) (if (null? lst) s (sum-plogp (cdr lst) (+ s (plogp (car lst))))))) (- (sum-plogp lst 0)))) ; (4) (define even-list (lambda (lst) (if (null? lst) () (if (even? (car lst)) (cons (car lst) (even-list (cdr lst))) (even-list (cdr lst)))))) ; (5) (define add-list (lambda (lst1 lst2) (if (null? lst1) () (cons (+ (car lst1) (car lst2)) (add-list (cdr lst1) (cdr lst2)))))) ; (6) (define rev-list (lambda (lst) (define rev-list00 (lambda (lst tsl) (if (null? lst) tsl (rev-list00 (cdr lst) (cons (car lst) tsl))))) (rev-list00 lst ()))) |