Gauche のリスト処理手続き : 1

呼称: リストの基本操作
目的: Gauche のリストの代表的な操作を学ぶ

#!/usr/local/bin/gosh
;; -*- coding: utf-8 -*-

;;; basic list operation

;; make list
(print "using quote : " '(1 2 3))
(print "using list  : " (list 1 2 3))

;; list operations
(print "car  : " (car '(1 2 3)))
(print "cdr  : " (cdr '(1 2 3)))
(print "cons : " (cons 1 '(2 3)))

;; make dotted pair
(print "dotted pair1 : " (cons 1 2))
(print "dotted pair2 : " '(1 . 2))

;; make dotted list
(print "dotted list : " (cons 1 (cons 2 3)))

;; make proper list
(print "proper list1 : " '(1 . ()))
(print "proper list2 : " (cons 1 ()))

;; null? procedure
(print "null? 1 : " (null? '(1 2 3)))
(print "null? 2 : " (null? '()))
(print "null? 3 : " (null? 3))

;; pair? procedure
(print "pair? 1 : " (pair? '(1 2 3)))
(print "pair? 2 : " (pair? '()))
(print "pair? 3 : " (pair? 3))

;; confirm proper list
(define (list? obj)
  (or (null? obj) (and (pair? obj) (list? (cdr obj)))))

(print "list? 1 : " (list? '()))
(print "list? 2 : " (list? '(1 . ())))
(print "list? 3 : " (list? '(1 . 2)))

;; eval procedure
(print "eval : " (eval '(+ 1 2) (interaction-environment)))

実行結果。

using quote : (1 2 3)
using list  : (1 2 3)
car  : 1
cdr  : (2 3)
cons : (1 2 3)
dotted pair1 : (1 . 2)
dotted pair2 : (1 . 2)
dotted list : (1 2 . 3)
proper list1 : (1)
proper list2 : (1)
null? 1 : #f
null? 2 : #t
null? 3 : #f
pair? 1 : #t
pair? 2 : #f
pair? 3 : #f
list? 1 : #t
list? 2 : #t
list? 3 : #f
eval : 3