サスペンドから復帰したら再接続ってのを Gauche で書く 2

サスペンドから復帰したら再接続ってのを Gauche で書くに関して、shiro さん、id:scinfaxiさんにコメントを頂いたのでリファクタリング

  • 連想リストは Quote で簡単に書ける
  • 正規表現を filter-map に直接渡すことが出来る(object-applyのおかげ)
  • process-output->string-list を使いましょう


こんな感じになりました。

#!/usr/bin/gosh
(use gauche.process)
(use srfi-1)
(use util.list)

(define my-essids '(("home-ssid"   . "/home/taro/home.sh")
                    ("office-ssid" . "/home/taro/offiec.sh")
                    ("cafe-ssid"   . "/home/taro/cafe.sh")))

;; iwlist を実行し存在する ESSID をリストで返す
(define (exist-essid-list)
  (map (cut <> 1)
       (filter-map #/ESSID:\"([^\"]+)\"/ (process-output->string-list "iwlist ath0 scan"))))

(define (main args)
  (let* ((essids (map car my-essids))
         (essid (find (lambda (o) (member o essids)) (exist-essid-list))))
    (if essid
        (sys-system (assoc-ref my-essids essid))))
  0)


ところでまだ cut に慣れなくて (cut <> 1) にとまどい lambda に展開して理解できたよ。