TtCppLisp

DOWNLOAD

実行ファイルとソース ttcpplisp_070912.zip

掲示板

適当になんでも。

概要

TtCppLisp は C++ で記述され実装された Windows 上で動作する Lisp 処理系です。 系統としては Common Lisp 系の実装となっており、 web で良くある scheme 系の実装ではないです。 コンパイル形式ではなくインタプリタとなっています。

C++ を選択した理由は C++ の勉強の為です。 当初は主に以下の機能の勉強を目的としていました。

  • 参照
  • テンプレート
  • STL(を含めた標準ライブラリ)

パフォーマンスは良くないです。というか考えて作ってないです。 たらいまわし関数で比較して、以下を実行した場合

(defun tak (x y z)
  (if (>= y x) y (tak (tak (- x 1) y z) (tak (- y 1) z x) (tak (- z 1) x y))))
(tak 10 5 0)

xyzzy => 1 秒ぐらい TtLisp => 2 秒ぐらい TtCppLisp => 13 秒ぐらい、で劇的に遅いです。

コンパイラは Borland C++ Compiler 5.5.1 を使用しています。

実装済みの代表的な機能

  • 基本的なデータ型
  • ブロック構造(block と return-from)
  • ガーベージコレクタ
  • クロージャ

細かいの

  • ディスパッチングマクロ(一部)
  • 異なる数値型同士の計算
  • 文字列リテラル中のエスケープ

簡単な使い方

コマンドプロンプトより Debug ディレクトリまたは Release ディレクトリの中の ttcpplisp.exe を実行してください。

lisp のプロンプトが開始されますので、 そこに式を記述してください。

コマンドライン引数にファイルを指定すると、 それを lisp として読み込み実行します。 load-library 関数を使用してもファイルから lisp を読み込みます。

実装されているデータ型

  • t
  • nil
  • リスト
  • シンボル
    • 実数
      • 整数
      • 浮動小数点数
      • 分数
    • 複素数
  • 文字列
  • 関数
    • lambda
    • 特別式
    • マクロ

実装されている関数

システム系

  • car
  • cdr
  • quote
  • cons
  • list
  • atom
  • eq
  • equal
  • not
  • null
  • and
  • or
  • progn
  • if
  • cond
  • lambda
  • macro
  • function
  • fset
  • set-function-name
  • defun
  • symbol-function
  • eval
  • apply
  • funcall
  • set
  • setq
  • macroexpand
  • let
  • block
  • return-from
  • load-library

算術系

  • complex
  • +
  • -
  • *
  • /
  • mod
  • =
  • /=
  • >
  • <
  • >=
  • <=

他いろいろ

  • gc
  • print
  • terpri
  • every
  • mapcar

既知のバグ

  • 変数に値が定義されない状態になる場合がある。
    • どうも Release のみで発生する
    • 最適化が問題なのかも
    • nil or t を評価後、変数に値が束縛されていないエラーを複数発生の後に 終了させると、致命的エラーが発生する。
  • 参照カウンタが負になる場合がある
  • function の引数に関数が未定義のシンボルを指定した場合落ちる