经过本系列前面几篇文章对 F# 的介绍,是时候来一个比较小巧的例子了。
这个例子的原文见 https://fsharpforfunandprofit.com/posts/roman-numerals/
将罗马数字转换成普通的十进制数字,完整代码如下:
module Roman = type Digit = I | V | X | L | C | D | M type Numeral = Numeral of Digit list let digitToInt = function | I -> 1 | V -> 5 | X -> 10 | L -> 50 | C -> 100 | D -> 500 | M -> 1000 let rec digitsToInt = function | [] -> 0 | x::y::tail when x < y -> (digitToInt y - digitToInt x) + digitsToInt tail | digit::tail -> digitToInt digit + digitsToInt tail let print digits = digits |> digitsToInt |> printfn "%A"非常优雅,非常简洁、清晰,可读性强,易扩展易维护,没有变量,不用管理状态,函数没有副作用,不容易出错,而且类型安全,可进行静态类型分析。
上面是一个模块,可以这样使用它:
open type Roman.DigitRoman.print [I;I;I;I] // 4Roman.print [I;V] // 4Roman.print [V;I] // 6Roman.print [I;X] // 9[M;C;M;L;X;X;I;X] |> Roman.print // 1979[M;C;M;X;L;I;V] |> Roman.print // 1944本文介绍了一个比较完整的例子,它像一个小点心,希望你也能和我一样初尝 F# 函数式编程的美味。
原文转载:http://www.shaoqun.com/a/497191.html
c88:https://www.ikjzd.com/w/1017
虚拟信用卡:https://www.ikjzd.com/w/1055
isbn:https://www.ikjzd.com/w/174
经过本系列前面几篇文章对F#的介绍,是时候来一个比较小巧的例子了。这个例子的原文见https://fsharpforfunandprofit.com/posts/roman-numerals/将罗马数字转换成普通的十进制数字,完整代码如下:moduleRoman=typeDigit=I|V|X|L|C|D|MtypeNumeral=NumeralofDigitlistletdigitToInt=f
谷歌趋势:谷歌趋势
蜜芽宝贝官网:蜜芽宝贝官网
贵阳青岩镇:青灰苍黑的石片当瓦(组图) - :贵阳青岩镇:青灰苍黑的石片当瓦(组图) -
产品满足亚马逊秒杀条件却没被推荐?可能是这些原因:产品满足亚马逊秒杀条件却没被推荐?可能是这些原因
从东莞到深圳西冲怎么走?:从东莞到深圳西冲怎么走?