7.9 KiB
7.9 KiB
title | author | date | wordtwit_post_info | categories | |||
---|---|---|---|---|---|---|---|
可変長引数を受け取る手続きを書くときに再帰で処理する際はどうすればいいのかしら? | kazu634 | 2008-09-28 |
|
|
自力でmaxを定義するの続き。どうしても定義できない。問題は
(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)))])]))
としたときに(my_max (cons (cadr lis) (cddr lis)))とかの部分で引数として渡されると、結果として*1みたいなリストが渡されてmy_lengthの結果が1になってしまうこと。考えたのは
- my_lengthを拡張して、'(1 2 (3 4) (5 6))とかでも認識できるようにする
でも、for-eachを使ってみればいいのかなーと思ったんだけど、うまく再帰の形で要素数をカウントできず。。。しょうがないから、
- ‘(1 2 (3 4) (5 6))を'(1 2 3 4 5 6)にする
を考えているところ。
- 作者: Kahuaプロジェクト,川合史朗
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/03/14
- メディア: 大型本
- 購入: 22人 クリック: 713回
- この商品を含むブログ (272件) を見る
*1:1 2 3 4 5