[Gauche-devel-jp] 省略可能引数とデフォルト値

アーカイブの一覧に戻る

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の設計が間違っている」というので
も可)。

-- 
木村 冬樹




Gauche-devel-jp メーリングリストの案内
アーカイブの一覧に戻る