Kimura Fuyuki
fuyuk****@hadal*****
2003年 2月 19日 (水) 09:15:49 JST
同じ問題で何度も引っかかるので相談に乗ってください。 <問題> 次のような二つのオプショナル引数を取る関数があったとして、 (define (do-something . args) (let-optionals* args ((host "www.yahoo.com") (port 80)) (print host ":" port))) この関数を呼ぶだけのコマンドを書け。コマンドラインオプション(-h, -p)で hostとportを指定できるようにすること。 <解答例> (use gauche.parseopt) (define (main args) (let ((opt-host "www.yahoo.com") (opt-port 80)) (parse-options (cdr args) (("h=s" (host) (set! opt-host host)) ("p=s" (port) (set! opt-port (string->number port))))) (do-something opt-host opt-port))) しかしこの実装は面白くありません。do-somethingのデフォルト値をmainにま で引っぱってきているからです。 うまい書き方はないものでしょうか? 「自分ならこう書く」というあたりを 教えてください(「そもそもdo-somethingの設計が間違っている」というので も可)。 -- 木村 冬樹