任意の記号をデータとして扱う能力をつかって、言語の表現能力を拡張
クォート = 記号を操作するための要素
(a b) とすると、 a と b の値を要素としたリストを作ってしまう。 ここでつくりたいのは、a と b という記号のリスト。
| ;; 2.53 | |
| (list 'a 'b 'c) | |
| ; (a b c) | |
| (list (list 'george )) | |
| ; ((george)) | |
| (cdr '((x1 x2) (y1 y2))) | |
| ; ((y1 y2)) |
| ;; ((1 2) 3 4) | |
| (cons (list 1 2) (list 3 4)) | |
| ;; count-leaves | |
| (define x (cons (list 1 2) (list 3 4))) | |
| (length x) | |
| ;; 3 | |
| (count-leaves x) | |
| ;; 4 | |
| (list x x) |
| ;; リストに対するマップ | |
| (define (scale-list items factor) | |
| (if (null? items) | |
| nil | |
| (cons (* (car items) factor) | |
| (scale-list (cdr items) | |
| factor)))) | |
| ;; (scale-list (list 2 3 4 5) 10) | |
| ;; (10 20 30 40 50) |
| ;; others | |
| (define (average x y) | |
| (/ (+ x y) 2)) | |
| (define (gcd a b) | |
| (if (= b 0) | |
| a | |
| (gcd d (remainder a b)))) | |
| ;; 2.1 |
| #include <iostream> | |
| #include <cstdio> | |
| int main(int argc, char* argv[]) { | |
| int a = 10; | |
| int* b = &a; | |
| std::fprintf(stdout, "%p\n", &a); | |
| std::fprintf(stdout, "%p\n", b); | |
| std::fprintf(stdout, "%p\n", &b); |
| #include <iostream> | |
| #include <string> | |
| #include <cstdio> | |
| int main(int argc, char* argv[]) { | |
| int a = 10; | |
| int& b = a; | |
| std::fprintf(stdout, "%p\n", &a); | |
| std::fprintf(stdout, "%p\n", &b); |