6.9 KiB
6.9 KiB
title | author | date | wordtwit_post_info | categories | |||
---|---|---|---|---|---|---|---|
自力でmaxを定義する – なにかうまくいかないや | kazu634 | 2008-09-24 |
|
|
とりあえず作ってみた:
(define (my_length lis) (if (null? lis) (+ 1 (my_length (cdr lis))))) (define (my_max . lis) (cond [(null? lis) #f] [(= (my_length lis) 1) (car lis)] [(= (my_length lis) 2) (cond [(<= (car lis) (cadr lis)) (cadr lis)] [(>= (car lis) (cadr lis)) (car lis)])] [(>= (my_length lis) 3) (cond [(<= (car lis) (cadr lis)) (my_max (cons (cadr lis) (cddr lis)))] [(>= (car lis) (cadr lis)) (my_max (cons (car lis) (cddr lis)))])]))
でもこれだと、
gosh> (my_max 1 2 34 5 6) (2 34 5 6)
可変長引数の扱いについてもう一度見直してみようっと。可変長引数じゃなければ(=引数が「. lis」じゃなくて「lis」にして、リストを引数に渡してあげると)、希望通りの動作になる。たぶん可変長引数に特有のことなんだと思う。たぶんねー。