Cyan

15分

http://ameblo.jp/programming/entry-10001212615.html via 15 分のもやってみた - kozima の日記 - cadr group データが扱える人を探せ! - 象徴ヶ淵LINQのチュートリアル問題みたいな。 今度はsplitの書き直し含めて時間以内になんとか。 def(String.split…

なんかしらんけど配る

http://ameblo.jp/programming/entry-10001721422.html via トランプを配る - 日々ごちゃごちゃと考える 10分でカード配りな! - 象徴ヶ淵 「10分でコーディング」やってみた - kozima の日記 - cadr group 「10分でコーディング」を13分で - 'T - cad…

続・継続

前回の追記に書いたmydefをメソッド定義にも使えるように微修正。 mac(mydef)^(name, func): _ret := "return_" + if (name.parent == Messenger): (name.receiver.to_s() + "_" + name.message.to_s()) else: name.to_s() _body := Block.new([`(?_ret.inte…

Cyanの継続

思考実験: returnを関数と思ってみる話 - d.y.d. http://shinh.skr.jp/m/?date=20090307#p11Cyanを知ってから継続を勉強したというド素人なんですが、 globalVar = 0 hello = ^(): globalVar = return return(0) x = hello() say x say globalVar(1+x) say x…

インスタンスが属するクラスをあとから変更する操作を Cyan で

インスタンスが属するクラスをあとから変更する操作をいろいろな言語で - Smalltalkのtは小文字です parentをさくっと書き換えられるのでお題に書いてある条件だけならクリアできるけど、不要なスロットを消したりまるっとスロットを取っ替えたりできないの…

とりあえず

あなごるからどう考えてもtimeoutになるネタ。 Koch Island c=[" ","/","\\"] t=[[s=[0,0,0,0],s,s,s], [[0,0,0,1],[1,2,0,2],[2,0,2,1],[1,0,0,0]], [[2,1,2,0],[0,0,1,0],[0,1,0,0],[0,2,1,2]]] def(grow)^(m): (m.map^(l): l.foldl([[],[],[],[]])^(a,e):…

ご存知、ないのですか?

2chのCyanスレに人が来ていて珍しいなと思ったらこれか。 読者の皆さんは、「Cyan」(サイアン)という言語をご存じないかもしれない。Cyanは、Lispのマクロを持ち、Python風のインデントによってブロックを表すプログラミング言語。2008年の春、林拓人とい…

回文Quine

anarchy golf - Palindromic Quine 355byte->293byte。 (q=^(){ ('r).(=)(^(s, p){ aif(s.readc(), { r(s, it).(+)(p) }, :else { p }) }); ["(q=", q, ")()#)()", r(q.to_s().istring(), "=q(")].map(print) })()#)()} )tnirp(pam.])"(q=" ,)(gnirtsi.)(s_o…

Cyanのリスト操作

リテラルのリストの操作は色々短く書けてよさげ。 Lispとの対応 [a | b] -> (a . b) [a, b] -> (a b) [*a, b] -> `(,@a b) *(Expander)が便利。 cyan> a=[1,2,3] => [1, 2, 3] cyan> [0|a] => [0, 1, 2, 3] cyan> [*a,4] => [1, 2, 3, 4] cyan> b=a.map^(n):…

grass.cyのコマンドライン実行以外の使い方

Grass interpreter for Cyan language - * *scrap* grass.cyはGrassによる関数生成ユーティリティとしても使えます。 grass_eval_string関数は、与えられたコードの最後のapplicationの結果やabstraction定義をクロージャとして返します。 cyan> require "gr…

はううあ

grass.cyの説明とgrass-reader.lispをなんとかしようと思ってたのに気付いたらホールをまわっていた。 timeoutキツいよtimeout。Grassインタプリタ - takuto_hの日記で何やらコメントを頂けて嬉しいやら恥ずかしいやら。更新滞るってことはもしや受験生? 本…

Grass interpreter for Cyan language

書きかけのまま放置してたCL用GrassリーダーマクロをCyanに移植しました。とりあえず動いたのでリリース。 https://github.com/youz/cyan-scripts/blob/master/grass.cy => 本家 Grass the grass-planting programming language 使い方(ソースより) # Usage:…

CyanでCLのfind系関数っぽいものを生成するマクロ

定義に使うだけなのでselfの退避先以外の(必要なかった)シンボルは決め打ち。捕捉とかも大丈夫、だと思うけどどうだろう? 引数の取り方もアレだけど定義に使うだけなので以下略 def(Object.equal)^(obj): (.parent == obj.parent) && (self == obj) mac(make…

CyanでQuine

脱線が止まらない。 f=^(){ say("f=".(+)(f.to_s()).(+)(";f()")) };f()もしくは (f=^(){ say("(f=".(+)(f.to_s()).(+)(")()")) })()Quine いろいろ Javascript, Ioと同じ方法が使えました。

Cyanのマクロの基本

マクロで式を作る時、Lispと同じく準クオートとアンクオートを使うのが簡単だけど、もう1つPorter.new()やMessenger.new()を使う方法がある。 cyan> p = '(a b c) => a(b(c)) cyan> p.slots() => %{ callee => a, args => &(b(c)), parent => #<Porter> } cyan> m =</porter>…

Cyanで遊ぶ

Cyan, Yet Another New language - takuto_hの日記 S式じゃないのにLispと同等のマクロが書ける。すげー。 とりあえず遊ぶためにユーティリティーをいくつか。 ### macros mac(Object.equal)^(obj): `(((?self).parent == (?obj).parent) && (?self == ?obj)…