Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-04-16

DylanでL-99 (P01 最後のペアを返す)

| 01:27 | DylanでL-99 (P01 最後のペアを返す) - わだばLisperになる を含むブックマーク はてなブックマーク - DylanでL-99 (P01 最後のペアを返す) - わだばLisperになる

自分は何度かDylanに挑戦してはいるのですが、処理系のインストールの時点で挫折したり、動いてもコンパイルの仕方をすぐ忘れたり、S式でないので文法を憶えられなかったりして何度も挫折しています。

…ということで、L-99なのですが…。

Dylanには複数の処理系があります。Gwydion Dylanと、Open Dylanがあるのですが、今回はOpen Dylanにしておきます。

どうしてかというと、Open Dylanで最近SWANK(SLIMEのバックエンド)が動いてるらしく、SLIMEで開発できるっぽいので、Open Dylanの方が面白そうだということで…。

とりあえず、

http://www.opendylan.org/downloads/opendylan/1.0beta4/

にパッケージがあるので、ダウンロードしてインストールします。

これだけで動くようになりました。

それで、Dylanの開発環境なのですが、この辺も謎なところです。

昔のDylanのスクリーンショット等をみると非常にリッチな開発環境を持っていたようなのですが、フリーでもこういう環境はあるのでしょうか。

とりあえず、追々探って行くことにして、Emacsで書いてコンパイル、という方向で行きます。

Open Dylanの場合、make-dylan-appコマンドがインストールされます。

好きなディレクトリで、例えば、l99-01というプロジェクトの場合、

$ make-dylan-app l99-01

とすると、l99-01というディレクトリが作成され、その中に色々謎なものが生成されます。

それで、ソースファイルは、l99-01.dylanなのですが、これはHello, Woldのテンプレートになっています。

とりあえず、これを編集して、makeファイルも自動生成されるので、ソースを書いたらmakeする、ということになるみたいです。

Dylanでは、

シンボル→foo: もしくは、#"foo"

リスト→#(foo:, bar:, baz)

のようです。

formatのような、format-outがあるんですが、書法は、Cのprintf的です。

headは、carで、tailはcdr

empty?は、空かどうかを判定する総称関数。

コメントは、//で、C++っぽいです。

ちなみに、今回、一番驚いたのは、はてなのシンタックスハイライトにdylanがあったことです(笑)

let list = #(foo:, bar:, baz:);
format-out("%=\n", my-last(list));
// => #(#"baz")

// Code
module: l99-01

define function my-last(list)
  if (empty?(tail(list)))
    list;
  else
    my-last(tail(list));
  end if;
end function my-last;