Lisp プログラム書いてみました。
- square: 2乗する
- flatten: ツリーを左から再帰的に読んで、リストを返す
- concat: リストの連結
- reverse: リストをひっくり返す
(defun square (x) (* x x)) (eval 3) (defun flatten (x) (if x (if (atom x) (cons x nil) (concat (flatten (car x)) (flatten (cdr x)))) nil)) (defun concat (x y) (if x (cons (car x) (concat (cdr x) y)) y)) (defun reverse (x) (reverse-rec nil x)) (defun reverse-rec (x y) (if y (reverse-rec (cons (car y) x) (cdr y)) x)) (reverse '(1 2 3))
まだまだ実行速度やメモリ効率の面で難点がありますが、とりあえず晒し。