Comment detail
擬似lsの実装 (Nested Flatten)>クレバーなデータ構造をls内で毎回作ってもあまり速度に貢献しないだろうと判断。 次にデータ構造の話を出そうと思っていたんですが、 別の方がトピックで立ててくれたので、誘導してみる。
see: フォルダパス一覧のツリー構造への変換
odzさんの#4465の指摘を見て修正。
gosh> (ls '("aaa/bbb/ccc" "aaa/bbb/ddd" "aaa/ccc/zzz") "aaa")
("ccc/" "bbb/")
gosh> (ls '("aaa/bbb/ccc" "aaa/bbb/ddd" "aaa/ccc/zzz") "aaa")
("ccc/" "bbb/")
1 2 3 4 5 6 7 8 9 10 11 12 13 | (use srfi-1)
(use srfi-13)
(define (ls pathlist dir)
(let* ((prefix (string-trim-right dir #[/]))
(rx (string->regexp #`"^,(regexp-quote prefix)/")))
(fold (lambda (p rs)
(or (and-let* ([m (rx p)]
[r (regexp-replace* (m'after) #/(?<=\/).*/ "")]
[ (not (member r rs)) ])
(cons r rs))
rs))
'() pathlist)))
|





shiro
#4424()
[
Scheme
]
Rating0/0=0.00
gosh> (ls '("aaa/bbb" "aaa/ccc" "aaa/ddd/eee" "ddd/bbb/eee") "aaa/")
("bbb" "ccc" "ddd/")
gosh> (ls '("aaa/bbb" "aaa/ccc" "aaa/ddd/eee" "ddd/bbb/eee") "aaa/ddd/")
("eee")
gosh> (ls '("aaa/bbb" "aaa/ccc" "aaa/ddd/eee" "ddd/bbb/eee") "aaa/ddd")
("eee")
gosh> (ls '("aaa/bbb" "aaa/ccc" "aaa/ddd/eee" "ddd/bbb/eee") "aaa/bbb")
()
lsにはリストが渡されるので、クレバーなデータ構造をls内で毎回作ってもあまり速度に貢献しないだろうと判断。文字列マッチで済ませています。
Rating0/0=0.00-0+
2 replies [ reply ]