2020年12月8日星期二

F# 函数式编程之

经过本系列前面几篇文章对 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
谷歌趋势:谷歌趋势
蜜芽宝贝官网:蜜芽宝贝官网
贵阳青岩镇:青灰苍黑的石片当瓦(组图) - :贵阳青岩镇:青灰苍黑的石片当瓦(组图) -
产品满足亚马逊秒杀条件却没被推荐?可能是这些原因:产品满足亚马逊秒杀条件却没被推荐?可能是这些原因
从东莞到深圳西冲怎么走?:从东莞到深圳西冲怎么走?