2008-10-01から1ヶ月間の記事一覧

ラムダ計算

youzさんの記事からラムダ計算に興味を持ったので少しやってみました。 c0 = ^(f):^(x): x c1 = ^(f):^(x): f(x) c2 = ^(f):^(x): f(f(x)) c3 = ^(f):^(x): f(f(f(x))) succ = ^(n):^(f):^(x): f(n(f)(x)) plus = ^(m):^(n):^(f):^(x): m(f)(n(f)(x)) mult =…

cyan-1.0.2

Cyanで遊ぶ - * *scrap*にてご指摘いただいたバグを修正し、cyan-1.0.2を公開しました。今回のバグは、ブロックを表すオブジェクトが自身を評価する際、新しいインスタンスを返していなかったことにより、違った環境を持つべきブロックが同一のオブジェクト…

L-99をCyanで その3

L-99: Ninety-Nine Lisp Problemsより。 P03 def(List.element_at)^(n): if(n == 1): .car() else: .cdr().element_at(n - 1)cyan> ('[a, b, c, d, e]).element_at(3) => c

cyan-1.0.1

昨日の修正後公開したCyanの処理系を、cyan-1.0.1として公開しなおしました。今後、バグの修正を行うたびにバージョン番号を上げていきたいと思います。

バグを修正

Cyan - リリカル☆Lisp開発日記にて、Cyanの奇妙な動作を見つけていただきました。これは意図した動作ではないため、調べてみたところバグだとわかり、修正しました。環境をコピーする際、内部のフレームの順序が逆になっていたようです。その結果、外側での…

プログラミング歴

プロコンのページにおいて、私のプログラミング歴が約1年と書かれていましたが、事前のアンケートでは、あの項目は「本格的にプログラム開発を始めてからの年数」だったので、そのつもりで1年と書きました。項目名が省略され、意味がすこし変わってしまっ…

L-99をCyanで その2

L-99: Ninety-Nine Lisp Problemsより、前回の続きです。 P02 def(List.my_but_last)^: if(.cdr().cdr().null?()): self else: .cdr().my_but_last()cyan> ('[a, b, c, d]).my_but_last() => [c, d]

感謝

たくさんの方がCyanを見てくださっているようで、本当にうれしく思います。Cyanを公開するよう勧めてくださった方々、Cyanを紹介してくださった方々、Cyanに興味を持ってくださった方々に、心から感謝します。

Cyanのletについて

では、letは何なのかというと、関数型言語のようにプログラムを記述するためのマクロです。letマクロによって、letとnamed letの両方が書けます。(正確にはlet*です。) let^(&opt x = 1, y = 2): say(x + y) let(loop)^(&opt n = 10): if(n == 0): 1 else:…

Cyanにおける変数の扱い

http://cadr.g.hatena.ne.jp/g000001/20081025にて、Cyanについて取り上げていただきました。ありがとうございます。さて、記事において、Cyanのifがif-letのような動きをすることについて書かれていましたが、これはifの機能というより、Cyanの変数の扱い方…

L-99をCyanで その1

http://cadr.g.hatena.ne.jp/g000001/さん経由で見つけた、L-99: Ninety-Nine Lisp ProblemsというのをCyanでやってみたいと思います。 P01 def(List.my_last)^: if(.cdr().null?()): self else: .cdr().my_last()Listのメソッドとして定義してみました。 cy…

Cyan, Yet Another New language

プログラミング言語Cyanを公開しました。これは、私がU-20プログラミング・コンテストに応募し、個人部門で賞をいただいた作品です。Cyanは「さいあん」と読みます。Lispのマクロを持ち、Python風のインデントによってブロックを表します。インスタンスベー…