14 KiB
14 KiB
title | author | date | wordtwit_post_info | categories | |||
---|---|---|---|---|---|---|---|
自分でmaxを定義してみる | kazu634 | 2008-09-27 |
|
|
もしや
(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 3 4 5) (2 3 4 5)
になるのは、consすると二回目のmy_maxの引数の数が1だと思われているから?ちょっとがんばってみよう。
追記:
(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)) (car (cons (cadr lis) (cddr lis)))] [(>= (car lis) (cadr lis)) (car (cons (car lis) (cddr lis)))])])) gosh> (my_max 1 2 3 4 5) 2
となるから自分の勘違いかな?
追記の追記:
(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 3 4 5) #?=lis #?- (1 2 3 4 5) #?=lis #?- ((2 3 4 5)) (2 3 4 5)
いや、勘違いじゃなかったぞ!