■clispとgcl/sbclでガウスの和算、黄金比、フィボナッチ数列。 debian lennyでCommon Lisp(clisp) http://d.hatena.ne.jp/labunix/20111123 clispとgcl/sbclでネイピア数、tan(e)、アークタンジェント/アークコサインによる円周率の計算 http://labunix.hateblo.jp/entry/20151015/1444857625 ■ガウスの和算 $ num=100000;echo '(setq n '$num') (+ (* n (/ n 2)) (/ n 2))' | gcl | tail -3;echo 5000050000 > $ num=100000;echo '(setq n '$num') (+ (* n (/ n 2)) (/ n 2))' | sbcl | tail -3;echo ; in: SETQ N ; (SETQ N 100000) ; ; caught WARNING: ; undefined variable: N ; ; compilation unit finished ; Undefined variable: ; N ; caught 1 WARNING condition * 5000050000 * $ num=100000;echo '(setq n '$num') (+ (* n (/ n 2)) (/ n 2))' | clisp -q [1]> 100000 [2]> 5000050000 ■黄金比 $ echo '(defvar tolerance 0.00001) (defun fixed-point (f first-guess) (labels ((close-enough-p (v1 v2) (< (abs (- v1 v2)) tolerance)) (try (guess) (let ((next (funcall f guess))) (if (close-enough-p guess next) next (try next))))) (try first-guess))) (fixed-point (lambda (x) (+ 1 (/ 1 x))) 1.0)' | gcl | tail -3;echo 1.6180327868852458 > $ echo '(defvar tolerance 0.00001) (defun fixed-point (f first-guess) (labels ((close-enough-p (v1 v2) (< (abs (- v1 v2)) tolerance)) (try (guess) (let ((next (funcall f guess))) (if (close-enough-p guess next) next (try next))))) (try first-guess))) (fixed-point (lambda (x) (+ 1 (/ 1 x))) 1.0L0)' | sbcl | tail -3;echo * 1.6180327868852458d0 * $ echo '(defvar tolerance 0.00001) (defun fixed-point (f first-guess) (labels ((close-enough-p (v1 v2) (< (abs (- v1 v2)) tolerance)) (try (guess) (let ((next (funcall f guess))) (if (close-enough-p guess next) next (try next))))) (try first-guess))) (fixed-point (lambda (x) (+ 1 (/ 1 x))) 1.0L0)' | clisp -q [1]> TOLERANCE [2]> FIXED-POINT [3]> 1.6180327868852459016L0 ■フィボナッチ数列 $ echo "(defun mk-list (x max) (if (= x max) (list max) (cons x (mk-list (+ x 1) max)))) ;; 二重再帰 (defun fib (x) (cond ((= x 1) 1) ((= x 2) 1) (t (+ (fib (- x 1))(fib (- x 2)))))) (mapcar #'fib (mk-list 1 10))" | gcl | tail -3 ;echo (1 1 2 3 5 8 13 21 34 55) > $ echo "(defun mk-list (x max) (if (= x max) (list max) (cons x (mk-list (+ x 1) max)))) ;; 二重再帰 (defun fib (x) (cond ((= x 1) 1) ((= x 2) 1) (t (+ (fib (- x 1))(fib (- x 2)))))) (mapcar #'fib (mk-list 1 10))" | sbcl | tail -3 ;echo * (1 1 2 3 5 8 13 21 34 55) * $ echo "(defun mk-list (x max) (if (= x max) (list max) (cons x (mk-list (+ x 1) max)))) ;; 二重再帰 (defun fib (x) (cond ((= x 1) 1) ((= x 2) 1) (t (+ (fib (- x 1))(fib (- x 2)))))) (mapcar #'fib (mk-list 1 10))" | clisp -q [1]> MK-LIST [2]> FIB [3]> (1 1 2 3 5 8 13 21 34 55)