Cyan

ホームページ復旧

私のホームページへのアクセスが元通り可能になったようです。http://www.geocities.jp/takt0_h/index.htmlご不便をおかけしました。

Cyan for Silverlight

id:n7shiさんが、CyanをSilverlightへ移植してくださいました。Cyan for Silverlight - 七誌の開発日記本体にほとんど手を加えずにブラウザ上で処理系を動かせるとは、思ってもみませんでした。 非常に参考になります。ありがとうございます。

ホームページにアクセスできない問題について

現在、ジオシティーズのシステム障害により、私のホームページにアクセスできないようです。 応急処置として、SkyDriveにていくつかのファイルを公開しました。OneDriveCyanやYellowをダウンロードする際は、こちらをご利用ください。 お手数をおかけして申…

cyan-1.0.3

cyan-1.0.3を公開しました。準クオートの中でIndexerをうまく評価できないという不具合が修正されています。変更点はほんのわずかなので、diffを載せておきます。 diff -ru cyan-1.0.2/cyan/src/Cyan/Evaluator.cs cyan-1.0.3/cyan/src/Cyan/Evaluator.cs --…

取材

実は12月に、とある取材を受けていたのですが、その記事が公開されました。Cyanを設計した高校生、5カ月で5つの言語を習得 (1/3):【写真】天才プログラマに聞く10の質問(3) - @IT学校に取材の依頼が来た時には、私でいいのだろうかと思いましたが、学校…

Grassインタプリタ

id:youzさんが、CyanでGrassインタプリタを書いてくださいました。Grass interpreter for Cyan language - * *scrap*実は、私自身はCyanでこのようなちゃんとしたプログラムを書いたことがないため、今、非常に感動しています。私がこんなことを言える立場で…

L-99をCyanで その5

L-99: Ninety-Nine Lisp Problemsより。 P05 # named let def(List.reverse1)^: let(loop)^(&opt lst = self, acc): if(lst.null?()): acc else: loop(lst.cdr(), [lst.car() | acc]) # optional argument def(List.reverse2)^(&opt acc): if(.null?()): acc…

ゆの in Cyan

いまさらですが。 X = _ = 'X X.(/) = method^(_): X X.(<) = macro method^(_): print("ひだまりスケッチ×365 "); say(_); X X / _ / X < 来週も見てくださいね!

L-99をCyanで その4

L-99: Ninety-Nine Lisp Problemsより。 P04 def(List.number_of_elements1)^: if(.null?()): 0 else: 1 + .cdr().number_of_elements1() # foldlを使って def(List.number_of_elements2)^: .foldl(0)^(n, _): n + 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の奇妙な動作を見つけていただきました。これは意図した動作ではないため、調べてみたところバグだとわかり、修正しました。環境をコピーする際、内部のフレームの順序が逆になっていたようです。その結果、外側での…

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の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風のインデントによってブロックを表します。インスタンスベー…