だめな子

だめな子ですが頑張って成長してゆくのです。

Schemeで非決定性探索 深さ優先探索と幅優先探索

MacBook Air買いました!(挨拶
で、LLFutureんとき買ったOn Lispをがんばってしこしこ読んだらマクロのありがたさが少しわかったような
  ↓
でもSchemeってtraditional macroないんだよね... aifもかけやしねぇ
  ↓
syntax-caseで外の環境の変数とか補足できるよ!aifかけるよ!これは勝つる!!
  ↓
...あれ、使い方全然わかんない...←今ここ
それはそれとして、On Lispに乗ってる幅優先探索ってなんか思った通りの動作をしてくれない気がするんだけど...
見つかる解は浅いところのがちゃんと見つかるっぽいんだけど検索順路が深さ優先探索と同じ順序で探索していくのがなんかこー微妙な気持ち
どうすればいいんだ!!
深さ優先探索
PLAIN TEXT
SCHEME:

;;depth first search

(define depth-fail #f)

(define (depth-choose . args)

  (if (null? args)

      (depth-fail)

      (let ((fail0 depth-fail))

    (call/cc

     (lambda (cc)

       (set! depth-fail

         (lambda ()

           (set! depth-fail fail0)

           (cc (apply depth-choose (cdr args)))))

  [...]

Read the rest of Schemeで非決定性探索 深さ優先探索と幅優先探索

JRuby触ってみた!

ほんとに触っただけすぎてどうしようもないけどね
とりあえず普通にjrubyとかjirbでRubyと同じように遊べる
更には普通にJavaのクラスとか使えるし呼べるしすげー!って感じ
仕事でこっそり使ってもバレないんじゃないかコレ…
で、WindowsではjrubycがないのでRubyコードからバイトコードが作れない…
でもjrubycっていうファイルは%JRUBY_HOME%\binにあるので中身見てみるとなんかソレっぽいソースになってたので
@echo off
jruby -e "require 'jruby/jrubyc'; JRubyCompiler::compile_argv(ARGV)" %1 %2 %3 %4
こんなようなjrubyc.bat作っておけばOKな気がした

jrubyc hello.rb
set CLASSPATH=.
java -cp "%JRUBY_HOME%/lib/jruby.jar;%CLASSPATH%" hello
とかやっちゃうと
"Hello world!"
っとなりましたとさ
なんか普通にMechanizeとかもgemって使えるらしいしこれは夢がひろがりんぐかもわからんね!

Read the rest of JRuby触ってみた!

Lightweight Language Futureいってきたよ!!

たいへん楽しかった!
基調講演
PerlのLarryWallさんが来日して講演
通訳つくんだろとか思ってたら1時間ずっと英語
何いってるか1割くらいしかわかんなかった
LLで未来を発明する
話のワクが広すぎてネタが色々な方向にとんでって面白かった
Ypsilonの中の人がエラーメッセージが幸せだと幸せ!みたいなこと言っててそーだよねーと思った
俺が書いたブツは俺が使えればいいやすぎてエラーメッセージが超ないがしろなので自省しるということかっ
あと78年後には大統一理論が打ち立てられて「なんだ、やっぱLispに収束したじゃん」ってなるに違いない!ってひげぽんさんが言ってた!
最後に質問の人が「【セキュリティ】という単語がこのセッション中に1回も出なくて絶望したっ!!」って言ってたけど、そんなもんフレームワークとかで担保すればいいんじゃないの?と思う派の俺。言語が使いやすくて触ってて幸せになれるんなら、あとは他の人がそれをWrapすればいいじゃんみたいな。
言語としてセキュリティが保障されていることが重要なのかなぁ…。
サイコー!?フレームワーク
Seasarの中の人がアウェーな雰囲気すぎて笑った
Javaは書いててめんどくささがものすごいのが嫌いだ!
何であんなにめんどくさい印象になってるのか我ながら謎だけど
Gauche on Railsの吉田さんが「いや、Gauche on Railsっていらなくね?DSL作りやすいからそれぞれ用のフレームワーク勝手に作れば十分っしょ」みたいな趣旨のことを言ってたように思う(で、そういうもんなのか、っと思った)
あと、RoRは更新早すぎて一般人にはついていけないくて暗黒面に踏み込んだシスの人々しか使いこなせないんだって!
なんつー恐ろしいモノなんだ…
吉田さんは9/13にGauche/Kahuaセミナーもやるらしい
行ってみたいな でもレベル的に(俺が)下すぎて参加するとヤバい気もする どーしょー…
LLでアート
増田さんのAction Codingは見た目すげーカッコよかったし簡単そうに見えた
あーゆーカッコいいスクリーンセーバーとか壁紙とか欲しいなー
Proce55ingとゆーJava製の割とこわい(硬い)ものをJRubyでさっくり包んであげて色々工夫して触りやすくしました!みたいな物体だと判断
そういうアプローチもあるのかー みたいな JRubyやらJythonやらは会社でこっそり使ってもばれなさそうでいいですね!(バレるし
そして後半ぶっちゃけ落ちてた(サーセン
キミならどう書く!?
shinhさんが見てみたかったのでとりあえず満足
最後のHole 8のshinhさんの解説と回答が変態すぎて困った
色々みたセッションの中でかなり上位に入る笑えるっぷりだったー
最後に出てた質問の答えの
「ループの中で今何週目〜みたいなのが取れる組み込み変数が一番欲しい」っていうのはよかったなー デバッグのとき便利そう…
古い言語、新しい言語
あろはさんはどこからでもETに持ってく人だと思ってましたがETのEの字も出ませんでした。なんたることでしょう。
要約すると「JavaScript上で色々な言語処理系作ってみたよ!」と、「LLVMのバイトコードをABCに変換してブラウザ上でなんでも動かせばいいじゃん!」みたいな話だった
JavaScriptやらActionScriptってそんなに頑張れるの?どうなの?みたいなっ
ハッカーと画家(LLF会場で買ってまだあんまし読んでないけど)で書いてたみたく、そーなると一般ユーザはホント難しいこと考えないでブラウザだけあれば十分になると便利そうだよねぇ
ライトニング・トーク
面白かったものを抽出して…
Client-side database storageで実際にアプリケーションを作成してみた
めちゃめちゃ面白かった
クライアントサイドにSQLite仕込んで超Cookie!みたいなっ!でもドメイン単位でユニークなので超劣化クッキー!みたいなっ!
テンポラリビュー作りまくって作業できるしやりたい放題できてサイコーwww使ってるの俺だけwwww状態らしい
ちょっと調べてみたけど、HTML5の仕様に盛り込まれている新機能なのか
Safari3.1ではもう使えるらし Firefoxはどうなのかしら…
なんかこれで面白そうなネタ作れないかなー
ドメイン内でDB共有状態!なのを逆手にとった遊びとかも出来る気もするよなー
私は如何にしてNarioを作り、一面をクリアしたか
Grepして置換!Grepして置換!の壁紙が欲しくなった!
「Pit」で救う世界
なんつーか純粋に便利そう
IDやらパスワードやらを一元管理しましょう そうすると500年が節約できます!(適当すぎ
みたいなっ
UnBabel LLにLLを埋め込んでみた
大富豪的プログラミングwwwどんだけwwww
しかし、問題に適した言語をその都度選択するのは頭いいな
IOをRubyで書いてロジック部分をBrainF*ckで記述する!みたいな夢のような業務アプリがっ!すげーwww
Ruby on Railsで実現する自走式Webサーバー
なんという馬力(色々な意味で
これは会場でデモするべきだった!
大好き
ちょっと草植えときますね型言語Grass
存在は知ってたけどどんだけだしwWWwwwwWWww
つーか読んでも文法わかんねぇ…
思い出しつつ書いてみるとあんまり理解できてなかったらしいことに気がついてちょっと泣きたくなった
えと演者の6〜7割がMacでビビタ X61買ってUbuntuかなぁとか思ってたけど頑張ってMac買おうかなぁ あのインターフェースは一度は常用してみたい!
来年もあったらまたいく!!

Read the rest of Lightweight Language Futureいってきたよ!!

SchemeでLifeGame v3

PLAIN TEXT
SCHEME:

(use srfi-1)

(use srfi-27)

 

(define width 14)

(define height 10)

 

(define population 0.3)

 

(define birth '(3))

(define keep '(2 3))

 

(define element-x car)

(define element-y cadr)

(define element-value caddr)

(define (make-element x y v) (list x y v))

 

(define (make-field)

    (define (flatten x) (fold-right append '() x))

    (map

        (lambda (e) (make-element (car e) (cadr e) #f))

        (zip

  [...]

Read the rest of SchemeでLifeGame v3

SchemeでLifeGame v2

他の人の投稿も見てみた結果こうなった
PLAIN TEXT
SCHEME:

(use srfi-1)

(use srfi-27)

 

(define width 14)

(define height 10)

 

(define population 0.3)

 

(define birth '(3))

(define keep '(2 3))

 

(define element-x car)

(define element-y cadr)

(define element-value caddr)

(define (make-element x y v) (list x y v))

 

(define (step-exec value next proc)

    (define (iter value cc)

        (cc value

            (lambda () (iter (next value) cc))))

    [...]

Read the rest of SchemeでLifeGame v2

WindowsでChicken scheme

Windowsだとexe吐きたいんだよ!!
インストール手順メモ
MinGWとMSYSが必要になるのでいれとく
chickenはCドラ直下に入れる なぜかそうしないとダメ
export PATH="/c/chicken/bin:/c/MinGW/bin:$PATH"とかしてパス通してあげる
msysのetc/profileの
if [ $MSYSTEM == MINGW32 ]; then
export PATH=".:/usr/local/bin:/mingw/bin:/bin:$PATH"
else
export PATH=".:/usr/local/bin:/bin:/mingw/bin:$PATH"
fi
の後らへんに書いとくと毎回設定しなくていいので楽
そんでcsc test.scmとかやるとtest.exeが吐かれるよ!
ついでにobjdump -p test.exeしてみたら
DLL Name: libchicken.dll
DLL Name: KERNEL32.dll
DLL Name: msvcrt.dll
こんな感じ
eggのインスコの仕方がイマイチわからないけどとりあえずおっけーとしておくだわさ
なんかmsys.batをダブルクリックしてもMSYSが起動しなくなったんだけどなにが原因なんだか…?

Read the rest of WindowsでChicken scheme

SchemeでLifeGame

実行方法
gosh life.scmとかなんか適当
Chickenではsrfi-27なくて無理やった… chicken-setup srfi-27しても途中でコケるしとりあえず保留
初めてじゃ、どうかく?おるぐに投稿してみた
PLAIN TEXT
SCHEME:

(use srfi-1)

(use srfi-27)

 

(define width 14)   ;フィールドの幅

(define height 10)  ;フィールドの高さ

 

(define population 0.3) ;初期人口密度

 

(define birth '(3))     ;隣人が何人いれば新たに生まれるか

(define keep '(2 3))    ;隣人が何人のとき生存できるか

 

;フィールドの要素のx座標を取得

(define element-x caar)

 

;フィールドの要素のy座標を取得

(define element-y cadar)

 

;フィールドの要素の値を取得

(define element-value cadr)

 

;座標の束を作る

(define xy-asix

    (fold-right append '()

        (let

            ((width (+ width 2))

             (height (+ [...]

Read the rest of SchemeでLifeGame

call/cc

call/ccについて勉強する(難しいイメージがあるが案外わかる気がするので)
現時点で知っている事。漠然としたイメージ。
・ambとか実装できる(バックトラックってかっこいい)
・そのときの実行状況を返すらしい(実行状態の保存?好きなときに再開もできるとか聞いたことがあるぞ)
・関数呼び出しと関数からのリターンを1つの対として扱おうとすると便利らしい(両方操作できる的な意味で)
 (意味論がどーだか?対象性がうんたら?)
・うまく使ってあげればなんかGUIとか便利に作れそうな気がする
 (ボタンを押されると欲しい結果が得られるところまで実行して継続を返す プログラム的にはループで扱えて幸せ)
 (1ステップ実行して処理をコントローラに返す時とか便利そう)
・Kahuaみたいな感じで使うと幸せになれる(Sessionみたいな擬似的な処理の継続を使わず、本当の継続でWebページとかを構成できるので幸せ)
なんかコルーチン(こっちもどういうものかよくわかってない マイクロスレッド ファイバ)のイメージとすげー似てる気がする。
調べてみよう!
http://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/continuation.html
(define call/cc call-with-current-continuation)
call/ccは1引数関数らしい
違った 1引数関数を引数に取るらしい あ、違わない 1引数関数で、1引数関数を引数に取るらしい(ややこしい)
call/ccをコールした時点で継続が生成される
引数として渡した1引数関数に現在の継続を渡すらしい
(+ (* 1 2) (call/cc (lambda (c) (* 3 4))))
↑値に2を加える という継続が生成される
(+ 2 ?) こういうことか
で、(call/cc (lambda (c) (* 3 4)))には継続が渡されるんだと
で、先のlambda式の中で継続を呼び出していないので(* 3 4)の結果が返却され(+ 2 12)だってさ
一方
(+ (* 1 2) (call/cc (lambda (c) (* 3 (c 4)))))
だと継続を呼び出している(見た目、継続は関数として適用できるものらしい)
>関数の実行を直ちに終了して,継続への引数をcall/ccの値として,継続を実行する.
言い換えると、call/ccは1つの値を返す手続きなだけで、継続とは計算の続きのことだから要するに別の言語で言うところのreturn(計算の続きに値を渡す)と同じことだから、実行を直ちに中止して継続に渡した値でもって実行を継続してくれたほうが理にかなってるわけだ。理解できた。
継続は大域脱出に使える
大域脱出は例外処理に使える
例を見ると、次にかける数が0だったら継続に0を渡して大域脱出している。
gotoとか使ってなくてとっても安全ですね!
あと計算の回数も少なくなっていることがわかる。
次の例も理解できる。脱出したくなったらcall/ccのおかげで即脱出できている。
ここまででcall/ccがどういう挙動をするのかは理解できた。
確かにバックトラックはできそう。
別に難しいお話じゃないね、call/cc
でも、うまく使おうとするとすごく難しそう…
http://www.shido.info/lisp/scheme_amb.html
【お題】
ambっぽいものを作る
ていうか(define (hoge . huga) (〜〜〜〜))の.ってなんだっけ
可変長引数か
Rubyで言うと def hoge(*huga) 〜〜〜〜 end か
色々ぐだぐだ頑張って考えたんだけど、理解できてみるとお手本サイトの解説が非常にすっきりしてる。
failに(lambda () (cc 'no-choise))を束縛しなおす。
あ、ちょっとわかんないぞ
call/ccはどこまでを継続として生成するのやら
(set! fail (lambda [...]

Read the rest of call/cc

SICPその9

大越冬と部屋乃掃除をしようと思いつつFEZやってしまうわけだが!
1.3.4 値として返される手続き
手続きを返す手続きを考えてみる
(define (average-damp f)
(lambda (x) (average x (f x))))
だと
((average-damp square) 10)
で、(average 10 (square 10))で55を返す
つまり、average-dampは手続きを渡すと、引数として渡した値とaverage-dampに渡した手続きが返す値の平均をとる手続きを返すということだ。
で、何が嬉しいかというと
1.1.7で作成したsqrtとここで作成するsqrtは分かりやすさがぜんぜん違うということらしい
1.1.7sqrt
PLAIN TEXT
SCHEME:

(define (good-enough? guess x)

    (<(abs (- (square guess) x)) 0.001))

 

(define (improve guess x)

    (average guess (/ x guess)))

 

(define (sqrt-iter guess x)

    (if (good-enough? guess x)

        guess

        (sqrt-iter (improve guess x)

      [...]

Read the rest of SICPその9

SICPその8

人類の生み出す誘惑のなんと多きことか!
またしてもFEZはじめました生きててすいません
SICPその6のトップで書いたヤツ間違ってるよ
autoじゃなくてaddだよadd
で、毎回忘れてauto? path?なんだっけ?って忘れて自分のサイトがひっかかってまた困ったりしてるよチクショー
(add-load-path "D:\\Scheme\\code")
(load "1.21.scm")
問 1.31
PLAIN TEXT
SCHEME:

(define (square x)

    (* x x))

 

(define (sum term a next b)

    (if (> a b)

        0

        (+  (term a)

            (sum term (next a) next b))))

 

(define (product1 term a next b)

    (if (> a b)

        1

  [...]

Read the rest of SICPその8