#'((a 1) (a 2) (a 3) (b 100) (b 200))から'((a (1 2 3)) (b (100 200)))を得るには?
#(map (^l `(,(caar l) ,(map cadr l))) (group-collection '((a 1) (a 2) (a 3) (b 100) (b 200)) :key car))
#おお、group-collection。使ったことなかったです。㌧x。
#.勉強になるなぁ :-)
#(^l ...) って記法は何ですか? (lambda (l) ...) であることは推測できるのですが。
#ああ、trunkではそういうマクロが使えるようになってるんです。
##はやく0.9.1出さないとなあ。
#おーこれは便利。cutを二度と使わなくなりそう。
#cut以前にlambdaを使わなくなるか。
#(group-collection '((a 1) (a 2) (a 3) (b 100) (b 200)) :key car)) => (((a 1) (a 2) (a 3)) ((b 100) (b 200))) ふむ
#(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))
#Mac OS Xでglabを使ってファイル名を読み込むとこんな風になってしまいます。"助太刀屋助六オリジナルサウンドトラック/01 アバンタイトル.m4a"
##これはMacのHFS+がNDFという方式を使っているかららしいのですが、Gaucheではどうしたらよいでしょうか?
#あれ、ペーストすると濁点が分離しないな.
#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を使えるんじゃないかと思うんですが
#$ 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)
#おんなじだ
#(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はすでに使えるんだが。
#でも、それはGaucheの機能ではなくて、あくまでもApple版iconv固有の機能ですからねぇ。ソース自体はDarwinの一部として公開されているはずですが。
#ひょっとして、Apple版のJVMだったらサポートしてたりして >UTF-8-MAC
#昔、NetBSDで動かしていたApache HTTPdで構築したWebDAVサーバでUTF-8-MACをサポートするために、GNU iconvにDarwinから抜いてきたコードを練り込んで使ってました