2009/02/07

[scheme][Gauche]可変長引数、練習問題list

プログラミングGauche」P.72~

P.74 練習問題
;; list
;; MIT
(define (my-list . a) a)
;; lambda
(define my-list (lambda a a))

(my-list 1 2 3 4 5) ;; => (1 2 3 4 5)
(my-list 1) ;; => (1)
(my-list) ;; => ()

MIT記法と非MIT記法での可変長引数
;; MIT
(define (func . a) (print a))
(func 1 2 3 func + '() "aaa" 4 5 6)
;; => (1 2 3 #<closure func> #<subr +> () aaa 4 5 6)


;; lambda
(define func (lambda a (print a))
(func 1 2 3 func + '() "aaa" 4 5 6)
;; => ;; => (1 2 3 #<closure func> #<subr +> () aaa 4 5 6)

mapに複数のリストを渡してみる。
手続きも可変長引数を取れるように。
;; higher order varargs mapping
(map (lambda a (print a) a) '(1 2 3) '(1 2 3 4 5))
;; => (1 1)
;; => (2 2)
;; => (3 3)
;; => ((1 1) (2 2) (3 3))

print関数を自前で実装してみる。
;; print
;; MIT
(define (my-print . a)
  (map (lambda (s)(display s)(newline)) a))
(my-print 1 2 3)
;; => 1
;; => 2
;; => 3
;; => (#<undef> #<undef> #<undef>)



;; lambda

(define my-print
  (lambda a
    (map (lambda (s)(display s)(newline)) a)))
(my-print 1 2 3 4 5)
;; => 1
;; => 2
;; => 3
;; => 4
;; => 5
;; => (#<undef> #<undef> #<undef> #<undef> #<undef>)

プログラミングGauche

0 件のコメント:

コメントを投稿