Gar*_*ary 3 f# haskell immutability referential-transparency data-structures
Edison API和Core模块是纯功能数据结构的Haskell实现
F#和原生.Net数据结构是否足以涵盖Edison API和Core中的用例?
尝试将API和CORE Haskell模块移植到F#会有什么好处吗?
我没有看到在爱迪生的文件,但如果它没有什么比Haskell的实现纯功能数据结构多,是不是更有意义口SML代码是在书/论文?它应该比移植Haskell代码更容易,Haskell代码必须注释严格,而F#必须注释为懒惰.
本书使用的语言是SML,其语法扩展用于延迟评估.F#本身提供了一半的扩展:
> let x = lazy 12;;
val x : Lazy<int> = <unevaluated>
> match x with
| Lazy(n) -> n;;
val it : int = 12
> x;;
val it : Lazy<int> = 12
Run Code Online (Sandbox Code Playgroud)
要转换本书的fun lazy表示法,请更改:
fun lazy plus ($m, $n) = $m + n
Run Code Online (Sandbox Code Playgroud)
对此:
let plus (m',n') = lazy (
match (m',n') with
| (Lazy(m), Lazy(n)) -> (lazy (m + n)).Force())
Run Code Online (Sandbox Code Playgroud)
(参见书中的第33页).SML和F#之间的差异是次要语法,因此翻译应该很容易.
至于它是否值得,Okasaki的书中的大部分数据结构都是非常专业的,所以它们不太可能已经存在于.NET中,即使是F#的不可变Set和Map也是如此.对于需要这些数据结构的人来说是值得的.
几个月后重新审视这个问题,我注意到了
http://lepensemoi.free.fr/index.php/tag/purely-functional-data-structures
有人在那个博客上实施了很多.