Gauche > Archives > 2015/07/10

2015/07/10 21:38:18 UTCshiro
#
万能アクセサ "~" は (~ foo 'bar 1 'baz 0) とかできるので便利なんだけど (よくある言語風に書けばfoo->{"bar"}[1]->{"baz"}[0])、途中で存在しない要素とかをアクセスしてしまうとそこでエラーが上がる。
#
安全側に倒すという意味ではその方がいいかもしれないんだけど、チェインのどこでエラーが上がってるかわかりにくいのであまり意味のある対応が出来ない。やるとしたらどっか根元でまとめて捕まえて処理全体をアボートするくらい。細かい対応したいなら一段づつチェック入れることになるので ~ は使えない。
#
だとしたら、むしろMaybeモナドみたいに、途中で失敗したら勝手に失敗値が返るって方が使い勝手が良いかもしれない。Clojureのget-inとかは失敗値としてnilを使ってる。Schemeなら#fだろうか。
#
最後のアクセサの結果が本当に#fだった場合と区別ができない、のはまあ仕方ない。
#
#fが出てきたら残りは全部#fにする、というのは(ref #f x) => #f を定義しとくだけだからすぐできるな。