6.2 リストの基本操作
gosh> '(1 . (2 . (3 . (4 . (5 . ()))))) (1 2 3 4 5)
(1 . (2 . (3 . (4 . (5 . ()))))) と (1 2 3 4 5) は同等で、通常はドットをなるべく使わない表記をしている。
で、初心忘るべからずというか、この逆の関数を作ってみた。
(define (q-string x) (if (string? x) (string-append "\"" x "\"") (x->string x))) (define (p-list ls) (if (null? ls) "()" (if (pair? ls) (string-append "(" (q-string (car ls)) " . " (p-list (cdr ls)) ")") (q-string ls)))) (print (p-list '(1 2 3 4 5))) ;;=> (1 . (2 . (3 . (4 . (5 . ()))))) (print (p-list '(1 "abc" 3 4 . 5))) ;;=> (1 . ("abc" . (3 . (4 . 5)))) (print (p-list '(1))) ;;=> (1 . ()) (print (p-list '(1 . ()))) ;;=> (1 . ()) (print (p-list '(() . 1))) ;;=> (() . 1) (print (p-list '(1 . 2))) ;;=> (1 . 2)