2

私はF#が初めてです。数値を対応するローマ数字に変換する F# プログラムを作成しようとしています。

type RomanDigit = I | IV | V | IX
let rec romanNumeral number =
    let values = [ 9; 5; 4; 1 ]
    let toRomanDigit x =
        match x with
        | 9 -> IX
        | 5 -> V
        | 4 -> IV
        | 1 -> I
    let capture x =
        values
        |> Seq.find ( fun x -> number >= x )
    match number with
    | 0 -> []
    | int -> Seq.toList ( Seq.concat [ [ toRomanDigit capture ]; romanNumeral ( number - capture ) ] )

ここでの問題は、キャプチャの型が 'a -> int であることですが、Seq.find が int を返すことを考えると、型が int になると予想しています。特に、キャプチャへの後続の呼び出しは、特に次の場合にエラーをスローします。

| int -> Seq.toList ( Seq.concat [ [ toRomanDigit capture ]; romanNumeral ( number - capture ) ] )

私は何を間違っていますか?

4

2 に答える 2

4

capture関数ではなく値にする必要がありますか? その場合は、パラメーターを削除します。

let capture =
    values
    |> Seq.find ( fun x -> number >= x )
于 2013-08-08T15:04:37.377 に答える