サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
cranebird.hatenadiary.org
モナドの練習として仮想マシンを書く。レジスタとメモリを、キーをレジスタまたはアドレスとし値を保持できる Map で表すことにしよう。 type Regs r x = Map.Map r x type Memory p x = Map.Map p x data VM r p x = VM (Regs r x) (Memory p x) deriving (Eq, Show) この仮想マシンを状態モナドにして、メモリとレジスタを更新/参照する関数 store, load, storeReg, loadReg を用意し、runStateT や evalStateT で実行することを考える。 利用しているメモリアドレスの上限をレジスタで管理することにすると、単純化したメモリアロケーションを行う関数 alloc が書ける。 alloc r = do fp <- loadReg r modifyReg
個人的 Forth 情報の更新版。 実装するための情報 Moving Forth: Part1 http://www.bradrodriguez.com/papers/moving1.htm Threaded code について CS 636 / 536 Spring 2009 The Structure of Programming Languages 講義録。詳しくてとてもよい。 http://eliza.newhaven.edu/lang/attach/L2.pdf http://eliza.newhaven.edu/lang/attach/L3.pdf Forth の有用/有名な文章 eForth http://offete.com/files/zeneForth.htm eForth と禅/ eForth Overview Starting Forth http://www.fo
追記: さらに更新(6/23)。 追記: ちょっと更新。 Template Haskell を以下のように進めている。 生成したいボイラープレートの一部を書き下し、コンパイルが通ることを確認する。 インデントによるレイアウト規則を使っている場合は、次に行う構文木の調査のために、波括弧とセミコロンで書き直しておく。 生成したいコードを runQ に渡し、構文木を調べる。 出力された構文木の構造を調べる。 出力された構文木をそのまま返す関数を、サンプルとして書く。 コンパイルが通ることを確認したら、生成したいボイラープレートを意識しつつ、リファクタリングする。 ボイラープレートを無くす。 以下は実例。 生成したいボイラープレートの一部を書き下し、コンパイルが通ることを確認する。 -- 例。この T1 以外に引数が 2つの T2 a b,3つの T3 a b cと多数の類似のコードがあり、TH
Emacs SLIME(http://common-lisp.net/project/slime/) には、 slime-media という拡張機能があり、REPL バッファ内に画像を表示できます。SLIME をリモートサーバ上の Lisp プロセスに接続して使用しているばあい、少し処理が必要だったので記録しておきます。 前提 外部のサーバ上で SWANK-SERVER を実行する。(swank-loader:init, swank:create-server) Emacs はクライアントのPC上で実行する。ssh トンネルを張り、 slime-connect で接続する。 Common Lisp のソースコードは、サーバ上に保存し、Emacs からは TRAMP モードで透過的に編集する。 モチベーション SLIME 上で画像を対話的に作成し、簡単に確認したい。 実装 swank には、
レンタルサーバを借り、Lisp の開発環境を構築する際のメモ。 サーバ さくらのVPS (http://vps.sakura.ad.jp/) を借りた。すぐに安価に始められ root 権限を持てる。Cent OS 5.6 環境。 デフォルトでは決して安全ではないのでファイアウォールを設定した。必要なアプリケーションはパッケージ管理 yum を用いてインストールした。 Web アプリケーション構成 フロントエンドに Nginx を置き、バックエンドに Common Lisp (SBCL) で動くアプリケーションサーバを置く、という構成にした(今は Portable AllegroServe)。フロントエンドは Lisp のアプリケーションサーバに余計なことをさせず、また安全にしたい、という意図で置いた。SBCL では quicklisp を使うことにした。 SWANK + SLIME SWA
以下個人的 Forth 情報。まだちゃんと読んでいないのがほとんどなので注意。 Forth の有用/有名な文章 Starting Forth http://www.forth.com/starting-forth/ Forth Inc 社に置いてあるオンライン版 Thinking Forth http://thinking-forth.sourceforge.net/ Thinking Forth 講義録 CS 636 / 536 Spring 2009 The Structure of Programming Languages ここの Lecture 2. まとめ Forth関連の情報サイトのまとめ http://fujim.tumblr.com/post/361291349/forth Forth関連のリンクのまとめ http://filmlang.org/computer/fort
SLIME(The Superior Lisp Interaction Mode for Emacs) の REPL バッファに画像を表示できることがわかった。この機能はなかなか応用が利きそうだ。 SLIME の準備 以下必要な準備。 SLIME を環境を最新にする conrib/slime-media.el をロードする eval-in-emacs を有効にする SLIME の拡張機能(Contrib Package)を用いるため、新し目の SLIME をインストールする必要がある。わたしの環境では、 /opt/local/share/emacs/site-lisp/slime ディレクトリに SLIME 関連のファイルが保存されている。この直下の contrib ディレクトリ以下に、slime-media.el ファイルがあればよい。 slime-media.el は "Display
http://d.hatena.ne.jp/tokobayashi/20080527 (tokobayashiの日記)に昨日半日で自分で調べたこと、が既にまとまっている。P5 syntax というのか。 http://labs.uechoco.com/blog/2008/03/processingpdejava.html(うえちょこ@ぼろぐ) このページも詳しい。 結局、以下を行うことで、 exportApplication が(一応)コマンドラインから呼び出せるようになった。 svn からソースコード取得 Sketch クラスから ISketch クラスを抽出、新たに SketchBase クラスを追加。 Sketch.java は ISketch を implements させるよう修正。Compiler.java#compile メソッドは、ISketch を引数とするよう修正。 S
Gauche + Emacs で対話的にモジュールを使った開発しているときに、以下のような問題にあたります。 elisp を書いてみましたがそもそも同じような環境で開発されている皆様はどうされてるのでしょう?私の開発方法がそもそもずれている可能性もあるので、識者のコメントをいただけると嬉しいです。 1モジュールを1ファイル(.scm) に記述していて、複数のモジュールを同時に(つまり複数の.scmファイルがある状態)開発しているとします。emacs から run-scheme で Gauche を起動し、対話的に開発しています。この際、ファイル全体を毎回ロード(scheme-load-file, C-c C-l)するのは時間がかかるので、変更した S 式だけ、 scheme-send-last-sexp ,C-x C-e で評価したいです。 が、*scheme* バッファの (curren
話題の Clojure(http://clojure.org/)。 id:g000001 さん(http://cadr.g.hatena.ne.jp/g000001/)がとても詳しい。 Clojure って JVM で動くんだよなぁ、ってことは Java のライブラリも呼べるよなぁ、そうすると Proce55ing も呼べるなぁ、そうするとhttp://d.hatena.ne.jp/cranebird/20080906 で書いた、 Common Lisp + jython + PApplet の環境 が作れるかもなぁ、とやってみたら、あっさりできた。Clojure は Common Lisp でもないし Scheme でもないのでまだ全然慣れていないけど。 以下では、 CLASSPATH に processing の pde.jar, core.jar を追加して clojure の Re
data Reg = Zero | At | V0 | V1 | A0 | A1 | A2 | A3 | T0 | T1 | T2 | T3 | T4 | T5 | T6 | T7 | S0 | S1 | S2 | S3 | S4 | S5 | S6 | S7 | T8 | T9 | GP | SP | FP | RQ | PC deriving (Eq, Ord, Show, Enum, Bounded) data Insn = Add Reg Reg Reg | Sub Reg Reg Reg | J Word deriving (Eq, Ord, Show) data PseudoInsn = Pseudo [Insn] data Cell = W Word | I Insn deriving (Eq, Ord, Show) data VM = VM (Map.Map Reg Cel
"Compilers: Backend to Frontend and Back to Front Again, Abdulaziz Ghuloum" http://www.cs.indiana.edu/~aghuloum/compilers-tutorial-2006-09-16.pdf を入手する。 まずは真面目にこの簡単なテキストを使って scheme の勉強がてら scheme コンパイラのおもちゃを作成する。このドキュメントは scheme の知識は入門レベルで大丈夫(と書いてある)。 せっかくなので llvm を使ってみる。 最初は Common Lisp でやろうかと思ったけど、あまりに違いが多すぎるので最後まで終えてから考える。 まず準備。※以下は全然まとめずに、かつ llvm も gauche も良くわかっていない状態で書いているので、信用しないこと。 上記ドキュメント
このページを最初にブックマークしてみませんか?
『cranebirdの日記』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く