!kiyoka.blog.2009_03 RSSPLAIN

Related pages: !kiyoka.blog.list
1551555444444444044435555555555555555555555555555550555555555555205553555555555555555555555555555555555555550555555555555555555555555555555555555555555555550555555555555555555555555555555505555555555555555505
1

kiyoka日記。NendoSekkaの開発や、最近思うことなど

5

最新10件!kiyoka.blog   過去記事一覧!kiyoka.blog.list

5

kiyoka.blog_header 

1

このブログを書いている人: 西山 清香(kiyoka) - twitter: @kiyokaEXT

5

5

 

5

 

4

kiyoka.2009_03_31[Sumibi] 今更ながらSumibi.orgで漢字変換するときはネットワークが必須ということに気づく

4

先日、カフェでプログラミングした。

4
 3370581108_273781e3cd_o
4

ネットワークに繋がっていないので 、Sumibi.orgが使えず日本語返還ができないことに気がづいた。

4

ヒジョウニ、ザンネンデース。

4

こういう時はWebサービス弱いな...

4

カフェでプログラミングする時はブログは書けないな。

4

プログラミングに集中できるので、まあ良いことではあるが...

4

 

0

comment (disabled)

4

4

 

4

 

3

kiyoka.2009_03_30[言語][Nendo] そろそろオレ言語でもやっておくか(8)

5

Rubyで書いたLisp処理系の RedLisp 開発の続き。

5

lambdaとifの二つのスペシャルフォームを実装した結果、fact(階乗計算)関数が動くようになった。

5
$ ./redlisp
5
redlisp> (def fact
5
     (lambda (n)
5
       (if (= n 1)
5
           1
5
           (* n (fact (- n 1))))))
5
          rubyExp=<<<fact = lambda { |n|
5
if ( _eq.call(n , 1) ) then 1 else _multi.call(n , fact.call(_minus.call(n , 1))) end
5
}
5
>>>
5
#<Proc:0x4022dea0@./redlisp:263> 
5
redlisp> (fact 10)
5
          rubyExp=<<<fact.call(10)>>>
5
3628800
5
redlisp> (fact 20)
5
          rubyExp=<<<fact.call(20)>>>
5
2432902008176640000
5
redlisp> 
5

 

5

RedLispは、まだ実験段階なので、構文エラーなどの例外処理は真面目にやっていない。

5

しかし、内部でS式をRubyに動的にトランスレートしてはevalするという方式を取ること自体は間違いでは無さそうという感触は得た。

5
 3394736419_80a85b7aaa_m
5

さて、次はどんな実験をしようかな。

5

let let* の実装をやってみて、Rubyのレキシカルスコープがそのまま利用できるかの確認と、map等の高階関数をどうやって実装するか等の検討かな。

5

その後はRubyのクラスライブラリをどうやって呼び出すかあたりが課題となるだろう。

5

File#openとかはブロックを渡す場合と渡さない場合があるが、そういうのをどうやって呼び出し方変えるかなど考えないといけない事が控えている。

5

というか、RedLispはそういう思考実験を繰返しながら、言語デザインをするのが目的だったので、早くそのレベルまでいきたいな。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2009_03_27[猫] 最近のささみの寝る姿勢

5

最近は、両手を伸ばして寝るのがお気に入り。

5

何回見ても癒されるよー。

5
 3389964744_615541570b_m 床暖房がお気に入り。
5
 3389153383_a26bb54126_m 角度を変えて。
5
 3389965080_eaa5bc957c_m 正面。
5
 3389153983_aeb1b04b81 ホワイトベースみたい。
5

 

5

COMMENT(び)

かわゆい...

2

 

0

comment (disabled)

5

5

 

5

 

3

kiyoka.2009_03_25[言語][Nendo] そろそろオレ言語でもやっておくか(7)

5

RubyでLisp系言語処理系を作りはじめた

5

現段階でRubyのコードで大体500行くらい。

5

RedLispという名前にした。Googleで検索したところ、同じ名前のものは無かったのでこれにした。RedはRubyが赤いから。ナント安易な...

5

赤色というのは、プレゼンの時にシャア専用とか何とかいえばネタにしやすいという狙いもある(笑)

5

logo

5

 

5

こんな変な動きをするのだ

5
bash-3.2$ ./redlisp 
5
> (car '(a b c))
5
5
> (cdr '(a b c))
5
(b c )
5
> (+ 1 2 (+ 3 4 )) 
5
10 
5
> +
5
#<Proc:0x00021584@./redlisp:293> 
5
> 123
5
123 
5
> "123"
5
"123"
5
> (+ "123" "456")
5
"123456"
5
> (sprintf "%02X" (car '(15 16)))
5
"0F"
5
> (cons 1 2)
5
(1 . 2)
5
> (cons 1 '(2 3 4))
5
(1 2 3 4 )
5
> (exit 1)
5

 

5

で、結局なにを作りたいの?

5

S式でRubyプログラミングができたらどんな感じかを一度体験してみたいというのが作り始めた動機だ。

5

S式のどこの節を千切って、あっちへ接木してというような柔軟なプログラミング体験はRubyではできない。

5

Rubyの良い面も有るのでRubyのコードと混在できるようにするつもり。

5

なので、ユーザインタフェース的な実験がメインになる。ということで、実用言語としてのパフォーマンスとかはあまり興味がないの。

5

S式でプログラミングをするのは好きなんだけど、例えばTokyoCabinetみたいな最近話題のDBでちょっと使って遊んでみたいというような場合には、Rubyのようにバインディングが量産されてくる言語にのっかるのが楽という事情もある。

5

とりあえず直近の目標は、Shibuya.LispでLTをすることなので、ソレナリに面白い話やデモができるように考えていこうと思う。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2009_03_21[Ruby] Rubyのよくわからない挙動(1)

5

===メソッド(比較演算子)の挙動がよくわからない。

5

クラス A を定義し、インスタンスを a に代入する。

5
$ irb
5
>> class A ; end
5
class A ; end
5
=> nil
5
>> a = A.new
5
a = A.new
5
=> #<A:0x3637ec>
5

 

5

== がtrueになるのはわかる。

5
>> a.class == A
5
a.class == A
5
=> true
5

 

5

=== では何故falseになるのか。

5
>> a.class === A
5
a.class === A
5
=> false
5

 

5

=== がtrueになってくれないと === 演算子が適用される case 〜 when が使えない。

5

例えば、

5
  case val.class
5
  when Cell
5
    Cell型の場合の処理
5
  when Fixnum
5
    Fixnum型の場合の処理
5
  end
5

という記述はダメ。どれにもマッチしない。

5

 

5

こう書けばいけるけど、ちょっと苦しい。

5
  case val.class.to_s
5
  when "Cell"
5
    Cell型の場合の処理
5
  when "Fixnum"
5
    Fixnum型の場合の処理
5
  end
5

 

5

こんな場合Rubyの定石として、どう書くんだろう。

5

 

5

COMMENTGrape

勉強し始めたばかりなので、まだ何とも言えませんが、

Rubyの===は、「サブクラスで適宜再定義される」とあるので、オブジェクトによって挙動が違う可能性があります。

つまり、実装によっては必ずしも型が同じで値が同じ時にTrueという動きではないかもしれません。

的外れな答えでしたら、すみませんorz

5

COMMENTmogya

>こんな場合Rubyの定石として、どう書くんだろう。

こうらしいです。

 case val

  when Cell

    Cell型の場合の処理

  when Fixnum

    Fixnum型の場合の処理

  end

[ruby-list:10473]case with Class からはじまる一連のスレッドに書いてありました。

http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-list/10473?10428-11968

5

COMMENTkiyoka

Grapeさん、mogyaさん、コメントどうもです。

mogyaさんに教えてもらった方法でいけそうです。

内部の仕組みはよくわかりませんが、これで短く書けますね。(そのへんがRubyに対して好みがわかれるところでしょうが...)

以下、実験結果です。

irb(main):001:0> class A ; end

=> nil

irb(main):002:0> a = A.new

=> #<A:0x4023c478>

irb(main):003:0> case a

irb(main):004:1> when A

irb(main):005:1> 1

irb(main):006:1> when B

irb(main):007:1> 2

irb(main):008:1> else 

irb(main):009:1* 3

irb(main):010:1> end

=> 1

今作っているLispインタプリタをこのスタイルに直しておきますです。

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2009_03_20[言語]  そろそろオレ言語でもやっておくか(6)

5

Cyan作った人

5
 Cyanを設計した高校生、5カ月で5つの言語を習得EXT
5
 読者の皆さんは、「Cyan」(サイアン)という言語をご存じないかもしれない。
5
 Cyanは、Lispのマクロを持ち、Python風のインデントによってブロックを表す
5
 プログラミング言語。2008年の春、林拓人という1人の高校生によって設計さ
5
 れた。
5

 

5
 このあいだのShibuya.Lispテクニカルトーク#2のビデオも貼っておく。
5
  Cyanの現状と、これから
5

すごすぎる。

5

ものすごいフットワークの軽さ。見習うべき。

5

こんな風に軽やかに新しい言語を設計できたらいいんだけど...

5

 

5

自分も作ろうと思い立つ

5

と感心しているいちに、自分もやってみようと思いついた。もっと気楽に考えればいい。

5

目標は次のShibuya.Lispのライトニング・トークでしゃべるくらいの気軽さで行こう。

5

 

5

結局いろいろ考えた結果、RubyでLispインタプリタを作ることにした。

5

Lispの糖衣構文としてRubyっぽいものをいちから実装するよりは、RubyでLispインタプリタを実装して融合させた方が、自分のイメージに近いものができることに気がついた。

5

要するに前からぼんやり考えていた自分の欲しいものがやっと発見できたということ。

5

自分のほしいものが分からないなんて、人間って面白い。

5

(だから、人のソフトウェアやサービスを発見して、あっそうそう、こんなものが欲しかったんだ。なんで思いつかなかったんだ... という風なことがよく起きるんだと思う)

5

実は、自分が本当はRubyライクなインタプリタを作りたかったわけではなく、Ruby的なAlgol系言語とS式を混在してプログラミングができたらどんな感じだろうというのが知りたいだけだったのだ。

5

今は簡単な式がevalできるレベル。

5

関数定義ができる位のレベルになったら、紹介しようと思う。

5
 3370581108_273781e3cd_o 近くのカフェで集中してプログラミングしてるところ
5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2009_03_15[音楽]うちのR君の音楽の趣味は...

5

毎日のように音楽DVDをいろいろ鑑賞している。

5

そんな中、うちのR君(ゼロ歳児)が興味を示すDVDというのがある。

5

なぜか、キース・ジャレット、カラヤン(オーケストラ指揮者)、ジミ・ヘンドリックスの時に集中して観ている。

5

キース・ジャレットの時にはまさにガン見状態となる。

5

しかし、音楽のジャンルとしては同じビル・エヴァンス(ピアノ)には興味を示さない。

5

早くも音楽の趣味があるのかぁー。そうかそうか赤ちゃんはすごいなと思っていたが、どうも音楽性とは無関係であるということが分かってきた。

5

 

5

しばらくして、結局音楽性ではなくクネクネ度が深く関わっていることが分かったのである。

5

ビル・エヴァンスは静かにピアノを弾いている。

5

対するキース・ジャレット。クネクネ、クネクネェー。

5

こりゃ見るわな(笑)

5
  クネクネするキース・ジャレット - Solar
5

 

0

comment (disabled)

5