scheme

fluid-letを最適化できるケース

http://d.hatena.ne.jp/mjt/20100304/p1#c1267674218 fluid-let自体の継続とbodyの継続はdynamic-environmentが異なる---それがfluid-letの目的---なので、R5RS以降のdynamic-envionmentを継続の一部とするセマンティクスでは末尾呼び出しではない。 一般に…

psyntax-moshでloadをエミュレートする裏技

moshはScheme処理系としては珍しくloadに相当する操作を持っていない。しかし、psyntax的にはloadが存在するので不正なテクニックを駆使することで利用できる。 nmoshのビルド課程では、moshのletの問題を回避するためにこのテクニックを使っていて、実際う…

スロットの表記位置

PREV : http://d.hatena.ne.jp/mjt/20100129/p1 http://d.hatena.ne.jp/fatrow/20100208/1265639951 で、”人気の言語を作るには”で前置式後置式のアプローチが言及されていることを知った。 http://practical-scheme.net/trans/being-popular-j.html より深…

キーワード構文によるスロットアクセス

SchemeがLuaみたいに流行らない最大の理由はスロットアクセスが面倒な事だと思う。 http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3A%E3%82%B9%E3%83%AD%E3%83%83%E3%83%88%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9 Gaucheは[ ]のカッコをスロットアク…

map-closure特許

map-closureが特許出願されているのに気づいた。(USPTO #20080163188) http://www.bcl.hamilton.ie/~qobi/map-closure/ - 著者の一人はschemeコンパイラstalinの人 map-closureは、実行中の環境を検査/変更するためのAPIで、クロージャを渡すと、環境を書き…

lisp-transformer

R6RSには、伝統的なマクロを作るためのlisp-transformerが紹介されている。 http://github.com/okuoku/yunilibs/blob/master/lib/yuni/rnrs/ref/lisp-transformer.ss http://practical-scheme.net/wiliki/wiliki.cgi?R6RS%3A%E7%BF%BB%E8%A8%B3%3AStandard%2…

SRFI-42の拡張

SRFI-42では、ファイルの各行を扱う:lines-of-fileジェネレータが提案されているので実装してみた。 http://github.com/okuoku/yunilibs/blob/master/lib/yuni/ec.ss これにより、SRFI-42のsome-ec手続きでファイルを直ぐに読めるようになる。 (import (rnrs…

R6RSライブラリ中のexportしていないシンボルへのアクセス

http://code.google.com/p/mosh-scheme/issues/detail?id=104 ↑のコードは、以下のように、expand時に発生する*objects*への副作用に依存している。 (library (sublib) (export %bury %disinter) (import (rnrs)) (define *objects* (make-eq-hashtable)) (d…

ciseがR6RSにも欲しい

Gaucheにはgauche.cgen.ciseという(undocumentedで)便利なライブラリがあり、S式で書いたプログラムをC言語ソースに変換することが出来る。 これをそのままmoshに持ち込むのはちょっと大変なので、外堀を埋めていく形で少しづつ進めている。 (fmt)ライブラリ…

define-packet-formatをSRFIにするには

地味にFFIをSRFIにするより難しいんじゃないだろうか。 命名 まず命名が良くない。Schemeコミュニティは省略されない説明的な名前を好むが、yuniは可能な限り多くの人にプロトコル定義を書いてもらわないと価値を発揮しないので名前は可能な限り短く簡潔にし…

マクロ展開時のライブラリ

R6RSでは、マクロの展開(expand)時と実行(run)時で実行環境が分離されている。 で、今までマクロの展開時のライブラリ定義を殆ど書いた記憶がないのにいろいろなscheme語彙を使えるのは何故なのかが素朴な疑問だった。 R6RSを見ると、 For the libraries def…

define-macroなしで頑張ってsimple-structを作る

今までdefine-macroで書いていたsimple-structをR6RSのsyntax-caseを使って書き直した。 (define-syntax syntax-with: (lambda (x) (define (add: sym) (string->symbol (string-append (symbol->string sym) ":"))) (syntax-case x () ((_ target body ...)…

キーワードの良いところ

キーワード(引数)の良いところを考えてmoshに入れてもらおう企画。 1. カッコが減る 言うまでもない。 ;; alist (funct (hoge . param-a) (fuga . param-b)) ;; keywords (funct :hoge param-a :fuga param-b) 基本的なキーワードは:を前置ないし後置するだ…

キーワード

moshにもそろそろキーワード引数が欲しい。例えばGaucheのlet-keywordsとかSRFI-89のような。 これらのキーワードシステムはデータタイプを拡張するのでR6RS(やR5RS)の範囲内で実現することは出来ないが、R6RSに関しては似たものがxitomatlに有る。 http://g…

R6RSの動かし方

http://wiki.osdev.info/?R6RS こういう情報が集まってるところって無いんだろうか。それともみんな複数の実装を(R6RSとして)並べて使うことが無いから需要が無い?

transform環境はrun-time環境の定義を引き継ぐか

追記 : 正解は、 (import (for (some library) expand)) らしい。 追記 : PLTではdefine-for-syntaxをつかうしか解決策は無いようだ。 http://d.hatena.ne.jp/reinyannyan/20081229/p1 バージョン 4 以降の PLT Scheme では、マクロ展開のフェーズは実行時と…

importしたライブラリでコードを変形するマクロ

追記 : http://www.het.brown.edu/people/andre/macros/ の * Wrapped = Unwrapped (r6rs optional): A wrapped syntax object is the same as an unwrapped syntax object, and can be directly manipulated using car, cdr, ... without syntax-case decon…

moshとYpsilonでスコープが異なるケース

追記 : 同じpsyntaxベースのikarusでも動くので、moshの実装上の都合かもしれない。 追記 : わかりづらいので手で展開した。 (import (rnrs)) (define (tx x) (+ 1 x)) (define (tp p) (syntax-case p () ((k arg) (datum->syntax (syntax k) (tx (syntax->d…

define-macroをR6RSで

skySchemeは自前のexpanderで伝統的なマクロを実装していたが、冷静に考えるとそのためだけにexpanderを持つのは無駄なので可能な限りR6RS側のmacroを使うことにする。(moshのcompilerではdefine-macroを使っているが、moshの中で実装を見つけられなかった。…

X-ceter-Oの解析

サークルの後輩の話を聞くと、あるボードゲームの必勝法を探索するという課題が出たらしい。調べてみるとボードゲームはX-Ceter-Oという名前で、非常に単純な拡張をTic-Tac-Toeに施したものとなっている。遊び方は以下の動画。 1〜6の数字が書かれた6つのコ…

fluid-letとパラメタオブジェクトの超えられない壁

fluid-letをマクロで書くというのは、要するにクロージャへの突入時にset!してまわることになる。 http://www.sampou.org/scheme/t-y-scheme/t-y-scheme-Z-H-10.html#node_sec_8.3 しかし、これはプログラムがconcurrentになったときに微妙に困る。言語の上…

GaucheでもAOBench

http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aAOBench 真打が登場してしまったので特に書くことが無い。 "Schemeレベルでのチューニング"の項は結構だいじなことが書かれていると思う。組み込みのUniform vectorsや高速でプリミティブなrecord t…

Shibuya.lispのLTに出ます

http://shibuya.lisp-users.org/2009/02/17/sllt-2/ 今のデモは同期動作で地味なので、当日までにもうちょっとインタラクティブな奴が用意できれば。

AO bench

prev : http://d.hatena.ne.jp/mjt/20090206/p1 http://lucille.atso-net.jp/aobench/ Ypsilonで、real 5m11.102s、user 5m52.234s、sys 0m26.054s。realよりもuserの方が長いのはGCの分。ちなみにmoshだと15分ほど。(core 2 duo 2.66GHz) すべてImmutable o…

Schemeでもパストレース

next : http://d.hatena.ne.jp/mjt/20090209/p1 http://lucille.atso-net.jp/rwp/pt/ の特に工夫も無いベタ移植。Ypsilonで30分ほど。

moshで絵を描く

というわけで、moshのFFIにdoubleが追加されたのでcairoが使えるようになった。 もっとも、現状ではIA32のみのサポートなので、このために全部の依存関係を手でビルドしたが。。 他の問題として、 FFI testがconfigureのHOST(やCFLAGS)を尊重しないのでクロ…

mosh on PS3(PPC64)

Ypsilonとmoshの両方がPS3で動作するようになった。他に(petit)Larcenyあたりを試す予定。 修正 SVN r1018について、ほとんど修正なし。 gccへのオプション-momit-leaf-frame-pointerを削除。-mで始まるオプションは基本的にアーキテクチャ依存。 http://gcc…

Ypsilon on PS3

http://d.hatena.ne.jp/fujita-y/20081220 書かれている通りにやったら普通に動いた。素晴らしい。 以下ベンチマーク結果。最適化オプションは-O3のみ。 3.2GHzのCPUで有ることを考えるとなんとも言えないが、まぁthreaded codeのalignできてんのかとかそう…

carとcdrの現場

carとcdrが何であるかは広く知られている。その現場を見に行く価値はある。 carとcdrは機械命令で_ない_ 命名の由来はIBM 704で用いられていた、"address part"と"decrement part"の用語とされる。 IBM 704上のLISPのソースコードを見ることが出来る*1。 htt…

Schemeの課題をあの実装で の4

今回はmosh。 mosh http://code.google.com/p/mosh-scheme/ インストールに関しては先日書いた(多少更新)。 http://d.hatena.ne.jp/mjt/20081203/p1 今回の目的のためだけならば、特にSVN版を使用する必要は無い。リリース版(.tar.gzでダウンロードできるも…