-1

次の要件があります: 有理数 (x % y) が与えられた場合:

  1. y != 1 の場合 => "x y" を返す
  2. それ以外の場合: "x" を返す

次の関数が機能します。

import Data.Ratio

my_show :: (Integral a, Show a)  => (Ratio a) -> String
my_show rat = let x = numerator rat
                  y = denominator rat in
                if y /= 1 then (show x) ++ " " ++ (show y) else show x

よりエレガントにすることは可能ですか?たとえば、 Data.Ratio のソースで、関数入力にいくつかの表記法を使用しているのを見ました: (x:%y)、しかしそれは私にとってはうまくいきませんでした。したがって、 and を使用letして明示的に呼び出す必要がnumeratorありdenominatorます。

4

1 に答える 1