Gauche > Archives > 2013/10/01

2013/10/01 01:34:13 UTCshiro
#
多値がうまくはまるケースのひとつに、fold2とかmap-accumとか、高階関数としてn-in m-outを再帰構造の中にはめ込む場合ってのがあると思うんですよね。あの感じをうまく図にできたらおもしろいと思うんですが。
#
再帰って自分から自分への投影だから、面を複数にして影を落としてるように、とかもうひとつ次元を増やさないと難しいかな。
2013/10/01 03:30:10 UTC(び)
#
ドキュメントの一部に訳を追加してみました。もしよろしければ。 https://gist.github.com/bizenn/6773408
2013/10/01 04:10:58 UTCshiro
#
コミットしました。まはろー>(び)
2013/10/01 13:11:20 UTCとおる。
#
test でパターンマッチするにはどうしたらいいかなあと思って、こんなのを書いてみました。
#
(define (check-match pat expr)
  (guard (exc (else #f))
         (eval `(match (quote ,expr) (,pat #t)) (interaction-environment))))

(test* "check-match"
       '(_ _ (1 2 (? string?)))
       '(abc def (1 2 "34"))
       check-match)
#
でもすでにありそう……。
#
なんか eval するのが無駄な気がするんですけど、もうちょっとすっきりかけない物でしょうか?
2013/10/01 14:14:36 UTCshiro
#
パターン--ここでは(_ _ (1 2 (? string?))--はマクロによって解釈される「構文の世界の要素」だけど、手続きであるcheck-matchが受け取れるのは「実行の世界の要素」なので、その世界のずれを吸収するためにevalが必要になります。eval wo
#
evalを避けたければ「構文の世界の要素」を構文の世界で受け渡すしかないので、test-matchのようなマクロを作るしかないですね。
2013/10/01 14:38:27 UTCとおる。
#
なるほどなるほど。最近 Node.js ばっかり書いててマクロとか継続が恋しくなってきたので、またちょっと Gauche をさわってみてました。
2013/10/01 15:10:32 UTCshiro
#
Node.jsって手動CPS変換してるみたいな感じ? (←偏見)
2013/10/01 16:53:18 UTCとおる。
#
いやまさにそんな感じです! async っていうライブラリを使うとだいぶましになるんですけど、それでもいちいち function をかかないといけないので。 https://github.com/caolan/async