2009/01/23

[scheme][Gauche]last-pair写経

 

定義済みのlast-pairを使ってみる。

;; last-pair
(last-pair '(1 2 3));; => (3)
(last-pair (cons 1 (cons 2 3))) ;; => (2 . 3)
(last-pair '()) ;; => ERRO: pair required: ()

 

pair?の動作も確認してみる。

;; pair?
(pair? '(1 2 3)) ;; => #t
(pair? '()) ;; => #f
(pair? (cons 1 (cons 1 2))) ;; => #t
(pair? (cons 1 2)) ;; => #t
(pair? (cons 1 '())) ;; => #t

 

いまさらcdrも。

;; cdr
(cdr '()) ;; => ERROR: pair required, but got ()
(cdr (cons 1 2)) ;; => 2
(cdr (cons 1 (cons 2 3))) ;; => (2 . 3)
(cdr '(1 2)) ;; => (2)
(cdr '(1)) ;; => ()

 

my-last-pairを定義してみる。

;; define my-last-pair
(define (my-last-pair ls)
  (if (pair? (cdr ls))
         (my-last-pair (cdr ls))
         ls))

 

(my-last-pair '()) ;; => ERROR: pair required, but got ()
(my-last-pair '(1)) ;; => (1)
(my-last-pair (cons 1 2)) ;; => (1 . 2)
(my-last-pair (cons 1 (cons 2 3))) ;; => (2 . 3)
(last-pair (cons 1 (cons 2 3))) ;; => (2 . 3)

0 件のコメント:

コメントを投稿