f(f(x)) ==> -x な、実数を返す f を定義せよ…クイズ 2


http://oss.timedia.co.jp/index.fcgi/kahua-web/show/ossz/oneline/2006-04-18


id:sumim:20060418:p1 の続き。nobsun の Haskell による解答を意訳で。

| ff |
ff := [:real |
   real abs
      caseOf: {
         [0] -> [real].
         [1] -> [real sign * Float infinity].
         [Float infinity] -> [real sign negated]}
      otherwise: [
         real abs < 1 ifTrue: [1 / real negated] ifFalse: [1 / real]]].

^ #(1.2 1 0.2 0 -0.2 -1 -1.2) collect: [:rr | ff value: (ff value: rr)]
=> #(-1.2 -1 -0.2 0 0.2 1 1.2)


絶対値が1末満か否かを“フラグ”に用いて、そのとき区別の付かない1を無限に飛ばすのがミソでしたか。