Gauche > Archives > 2010/09/17

2010/09/17 07:29:43 UTCeyasuyuki@twitter
#
'((a 1) (a 2) (a 3) (b 100) (b 200))から'((a (1 2 3)) (b (100 200)))を得るには?
2010/09/17 07:32:48 UTCshiro
#
(map (^l `(,(caar l) ,(map cadr l))) (group-collection '((a 1) (a 2) (a 3) (b 100) (b 200)) :key car))
2010/09/17 07:36:44 UTCeyasuyuki@twitter
#
おお、group-collection。使ったことなかったです。㌧x。
2010/09/17 07:38:44 UTCkmizumar@twitter
#
.勉強になるなぁ :-)
2010/09/17 07:51:45 UTCgolden_lucky@twitter
#
(^l ...) って記法は何ですか? (lambda (l) ...) であることは推測できるのですが。
2010/09/17 08:02:29 UTCshiro
#
ああ、trunkではそういうマクロが使えるようになってるんです。
#
http://blog.practical-scheme.net/gauche/20100428-shorter-names
2010/09/17 08:13:37 UTCshiro
#
はやく0.9.1出さないとなあ。
2010/09/17 08:24:35 UTCgolden_lucky@twitter
#
おーこれは便利。cutを二度と使わなくなりそう。
#
cut以前にlambdaを使わなくなるか。
2010/09/17 08:29:36 UTCeyasuyuki@twitter
#
(group-collection '((a 1) (a 2) (a 3) (b 100) (b 200)) :key car)) => (((a 1) (a 2) (a 3)) ((b 100) (b 200))) ふむ
2010/09/17 08:35:37 UTCeyasuyuki@twitter
#
(map (lambda (l) `(,(caar l) ,(map cdr l))) (group-collection '((a 1 2) (a 2 4) (a 3 2) (b 100 1) (b 200 3)) :key car))
2010/09/17 13:04:12 UTCえんどう
#
Mac OS Xでglabを使ってファイル名を読み込むとこんな風になってしまいます。"助太刀屋助六オリジナルサウンドトラック/01 アバンタイトル.m4a"
#
http://macwiki.sourceforge.jp/wiki/index.php/CarbonEmacs/%E6%97%A5%E6%9C%AC%E8%AA%9E%E7%92%B0%E5%A2%83%E3%81%AE%E8%A8%AD%E5%AE%9A#.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E5.90.8D.E3.81.AE.E6.BF.81.E7.82.B9.E3.83.BB.E5.8D.8A.E6.BF.81.E7.82.B9.E5.95.8F.E9.A1.8C
#
これはMacのHFS+がNDFという方式を使っているかららしいのですが、Gaucheではどうしたらよいでしょうか?
#
あれ、ペーストすると濁点が分離しないな.
2010/09/17 13:09:20 UTC(び)
#
Mac OS Xに同梱されているiconvを使っているなら、UTF-8-MACを入力エンコーディングにして、出力をUTF-8にすればよかったりしない?
#
% otool -L gauche--charconv.so
gauche--charconv.so:
	/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.0)
#
こうなってれば、エンコーディングにUTF-8-MACを使えるんじゃないかと思うんですが
2010/09/17 13:17:27 UTCえんどう
#
$ otool -L /usr/local/lib/gauche/0.9/i386-apple-darwin10.2.0/gauche--charconv.so 
/usr/local/lib/gauche/0.9/i386-apple-darwin10.2.0/gauche--charconv.so:
	/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.0)
#
おんなじだ
2010/09/17 13:35:21 UTCえんどう
#
(use file.util)
(use util.list)
(use gauche.charconv)
(use gauche.collection)
(use srfi-1)

(define plist (glob "Music/**/*"))

(define qlist (map (cut string-split <> "/") plist))

(define rlist (map cddr qlist))

(define slist (map (lambda (x y) (append x (list y))) rlist plist))

(define tlist (map (lambda (x) `(,(caar x) ,(map cdr x))) (group-collection slist :key car :test equal?)))

(define ulist (map (lambda (p) (cons (car p) (sort (cadr p) (lambda (x y) (string<? (car x) (car y)))))) tlist))

(define vlist (filter (lambda (x) (> (length x) 2)) ulist))

(define wlist (map (lambda (x) (cons (car x) (append-map (cut cdr <>) (cdr x)))) vlist))

(define xlist (map (lambda (x) (cons (car x) (map (lambda (p) (ces-convert #`"/mnt/sdcard/,|p|" 'utf-8-mac)) (cdr x)))) wlist))

(define (main args)
  (for-each (lambda (x) (with-output-to-file #`",(car x).m3u" (lambda _ (for-each print (cdr x))))) xlist))
#
できた。
#
こうなるとやはりAndroid上でGaucheが使いたくなる。Clojureはすでに使えるんだが。
2010/09/17 15:17:36 UTC(び)
#
でも、それはGaucheの機能ではなくて、あくまでもApple版iconv固有の機能ですからねぇ。ソース自体はDarwinの一部として公開されているはずですが。
#
ひょっとして、Apple版のJVMだったらサポートしてたりして >UTF-8-MAC
#
昔、NetBSDで動かしていたApache HTTPdで構築したWebDAVサーバでUTF-8-MACをサポートするために、GNU iconvにDarwinから抜いてきたコードを練り込んで使ってました