blog/content/post/2008/09/28/2008-09-28-00001040.md

7.9 KiB
Raw Blame History

title author date wordtwit_post_info categories
可変長引数を受け取る手続きを書くときに再帰で処理する際はどうすればいいのかしら? kazu634 2008-09-28
O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4313;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}
gauche
Lisp

自力で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)にする

を考えているところ。

プログラミングGauche

プログラミングGauche

*11 2 3 4 5