Gauche > Archives > 2013/03/12

2013/03/12 08:44:30 UTC齊藤
#
Haskell なら Maybe を使うパターンですね。
#
#f を受取ったら #f を返す関数を定義するよりは、 #f が返されたらそこで打ち切るような制御構造を使う方が一般化できて綺麗な気がします。
#
Gauche なら and-let* が便利です。
2013/03/12 09:38:09 UTCyamasushi
#
($ .... $ .... $ )の連鎖のなかで使う関数の一部で失敗した場合の処理に使います。and-let*は便利ですね。最近、使い始めました。
2013/03/12 09:42:46 UTCyamasushi
#
(define (andfn$ f) (^x (and x (f x))))
#
こんな感じの小物をつくれば、いいのかしらんとか思っています。
#
話が飛ぶのですが、JavaScriptをパースして、そのなかの配列データやJSONを抜き出したいときが多々あるのですけれど、これをするのに便利なライブラリはありますでしょうか? 今は正規表現とrfc.jsonをつかってごまかしています。
2013/03/12 09:56:59 UTCshiro
#
一般のJavaScriptコードってことですか? それならちゃんとしたJSのパーザを書かないとならないけど、私は知らないですね。
2013/03/12 10:06:47 UTCyamasushi
#
一般のJavaScriptです。ScriptのなかにあるJSONならなんとかなるのですけど、配列表現にデータが埋め込まれているときに困ってしまいました。正規表現を使って取りました。
2013/03/12 10:08:29 UTCshiro
#
いや一般的には正規表現じゃ原理的に無理ですよね。コードが特定のコンベンションに従っててそれをあてにするのならいいですけど。
2013/03/12 10:08:57 UTCyamasushi
#
あ、間に合わせの強引な方法です。(汗
#
たぶん、ツールが自動生成するようなScriptからデータを吸い出すので、法則はあるにはあるんです。
2013/03/12 10:20:18 UTCyamasushi
#
このページのように、JSONでなくJavaScriptの構文でデータが埋め込まれている場合です。 http://nbcsports.msnbc.com/id/47057400/
#
JSONっぽいので、なんか対策がありそうな気がしたのでした。
2013/03/12 11:54:40 UTC齊藤
#
JavaScript では文字列リテラルはダブルクォートでもシングルクォートでもいいですけど、 JSON ではダブルクォートでないと駄目なので、それでうまくいかないんでしょう。
#
私も似たような場面にぶつかったことがあって with-module でパーサに無理矢理割り込んで解決したことがあるんですが、そのときのコードが残ってない…。
2013/03/12 12:30:04 UTC齊藤
#
オブジェクトの要素名が (識別子でなく) 文字列でなきゃいけないってのもありますね。
2013/03/12 12:38:47 UTCkoguro
#
Gaucheでの解決策じゃないんですが、そのページのデータだと副作用がなさそうなので、JS処理系に食わせてしまったらどうでしょう。
2013/03/12 12:39:16 UTC齊藤
#
ナイスアイデア!!
2013/03/12 15:12:34 UTCillness072
#
こんばんわー、ちょっと質問よろしいでしょうか?
2013/03/12 15:13:35 UTC齊藤
#
こんばんわー
2013/03/12 15:14:24 UTCillness072
#
FreeBSD9.1でGauche0.9.3をインストールして、git HEADのGauche-tkもインストールして遊ぼうとしたんですが、なんかエラーになっちゃって困ってるんですけど、
#
gosh> (use tk)
#<undef>
gosh> (tk-init '())
#t
gosh> (wish-path)
"/usr/local/bin/wish"
gosh> (with-module tk (set! *tk-debug* #t))
#t
gosh> (tk-button '.b :text "Click me" :command (^[] (print "Yeah!")))
> gauche__tk__do button .b -text "Click me" -command "gauche__tk__callback 1 "
*** UNHANDLED-SIGNAL-ERROR: unhandled signal 13 (SIGPIPE)
Stack Trace:
_______________________________________
  0  (display s (process-input tkproc))
        At line 184 of "/usr/local/share/gauche-0.9/site/lib/tk.scm"
gosh> (gauche-version)
"0.9.3.3"
gosh> (gauche-architecture)
"x86_64-unknown-freebsd9.1"
#
こんなかんじなんですが、何がおかしいのかわかりませんか?
2013/03/12 15:26:07 UTCillness072
#
・・・もうちょっと自分でがんばってみますー、また来ます。ありがとうございました
2013/03/12 15:27:05 UTC(び)
#
SIGPIPEくらってるってことは、Gaucheの通信相手であるwishが死んでる?
2013/03/12 15:28:07 UTCillness072
#
なるほど。 ps aux | grep wish してみたところ特に何も出てこないので、死んでるっぽいですね・・・
2013/03/12 15:38:54 UTCillness072
#
(run-process "/usr/local/bin/wish") して、 #<process 2233 "/usr/local/bin/wish" active> が返ったあとに ps してもwishプロセスが見えないんで、wish側の問題みたいですね
#
なんかワカってきたかもです、ありがとうございましたーおやすみなさいー
2013/03/12 22:52:01 UTCyamasushi
#
(JavaScriptのパースの件) rfc.jsonの%objectの別バージョンで、キーをラベルにしたやつでパースするといいのではないかと考えたのですが、parser.pegの使い方がよくわからないです。(汗