タグ

ブックマーク / blog.bugyo.tk (5)

  • リリカル☆Lisp開発日記 » Blog Archive » 機械もすなる論理学を機械にやらせてみた

    TL;DR: Prologの双方向代入最高! はじめに 8年ほど前に『論理学を作る』というを読みまして、そこにタブローの方法と呼ばれる論理式の集合が充足可能か調べるアルゴリズムが載っていました。「暇があったらいつか実装してみるか」と思っていたら8年も経ってしまいましたが、暇があったので実装してみました。Prologで。 タブロー(tableau)とは要は木で、木を書くと論理式の集合が充足可能かどうか分かるというものです。こういう時にはWikipediaさんに説明を任せたいのですが、日語版にはまるで情報がありません。英語版はきちんと書いてあるっぽいので気になる方はそちらを参照してください。 少しだけ説明をすると、与えられた論理式の集合をルートとして、その中の複合式を充足させるのに必要な(より小さな)式を子として木を作っていき、ルートからリーフに至る経路にAと¬A (Aはリテラル) の両方

  • リリカル☆Lisp開発日記 » Blog Archive » Bivalent Stream

    Common Lispのストリームは扱う型を指定する必要があり、 :element-typeにcharacterを指定してやると文字のみしか扱えず、 (unsigned-byte 8)を指定するとバイナリデータしか扱えません。 しかし、例えばHTTPの通信を行うプログラムを書いたりするときは、 ヘッダ部分を処理するときは文字列としてデータをやりとりしたいし、 データ体を処理するときはバイナリデータをやりとりしたいので困ります。 CLISPではストリームが扱う型を動的に変更出きるので、 扱う型を変えたくなった時点で変更してやれば済みます。 #+clisp (setf (stream-element-type stream) '(unsigned-byte 8)) 公式の説明 使い方 で、ここまでは知っていたんですが、これと同じことをSCBLではどうやるんだろうと調べてみたら、 Bivale

  • リリカル☆Lisp開発日記 » Blog Archive » [LSP42] ドキッ!LISPだらけの大運動会

    (この記事はLISP Implementation Advent Calendar 25日目のためのエントリかもしれません。) 背景 今年の春、訳あって42個のプログラミング言語でLISP処理系を実装しました。ソースコードはすべてGitHub上においてます。作り終えたらやりたくなることは一つ。そう、速度の比較ですね。そんなわけで42個のLISP処理系の速度を計測しました。言語によって100倍以上の速度差があるため、すぐ終わるベンチマークでは速い言語同士の比較ができず、時間のかかるベンチマークだと遅い言語が終わらないため、3種類のベンチマークを用意して速度を比べました。計測には time コマンドの total を使用し、各言語3回の計測を行い、その中間値を使用しました。ハッキリ言っていい加減な値なので、きちんとした結果を知りたい人は各自42個の言語処理系を用意して計測しなおしてください。

  • リリカル☆Lisp開発日記 » Blog Archive » [LSP42] Standard MLとOCaml

    (この記事はLISP Implementation Advent Calendar 13日目のためのエントリです。) Standard MLとOCamlでLISPを作りました。 https://github.com/zick/SMLisp https://github.com/zick/OCamLisp Standard MLもOCamlもML系の言語で非常に良く似ています。が、文法はちょっとずつ違っていてCommon LispとSchemeのような薫りがします。 動機 今年の春、訳あって42個のプログラミング言語でLISP処理系を実装することになりました。これはその20〜21個目です。 私は変数に型が無い言語や、型が緩い言語が好きなんですが、そういった言語を探すのにも疲れてきたし、ついに20言語を突破するということで、思い切って型の強いStandard MLとOCamlを選びました。両方

  • リリカル☆Lisp開発日記 » Blog Archive » リリカルLisp ver1.6

    ヒープへのアロケーションが減った結果、GC回数が削減され、実行時間も短縮されました。 GCが発生しないプログラムでも速くなる(ことがある)ことを確認しています。 何でもかんでもスタックに置くと、apply関係で面倒な事もあるのですが、 まあ、リリカルLispで非常に長いリストを作ることもないだろうと考え、 特に工夫はしないことにしました。 -- リリカルLispを作り始めたのは、私zickが学部1回生のときですが、 気がつけば修士2回生になっており、この3月で学生生活も終わりです。 今後どうなるかはわかりませんが、 可能な範囲でリリカルLispのメンテは続けていこうと思います。 githubで公開しても、誰もメンテしてくれないしね。 This entry was posted on 木曜日, 3月 29th, 2012 at 10:23 AM and is filed under リリカル

    nfunato
    nfunato 2012/03/29
  • 1