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))

まだまだ実行速度やメモリ効率の面で難点がありますが、とりあえず晒し。