Ham*_*jan 4 f# clojure symbolic-math
我遇到了下面的F#样本,发现它很有趣.
http://www.codeproject.com/KB/net-languages/SymbolicCalcInFS.aspx
Clojure是否有语言/图书馆设施可以轻松完成这样的事情?如果使事情变得更容易,可以强制使用波兰表示法来表示公式.
谢谢,如果有问题请告诉我.
我对Clojure知之甚少,但至少有一些指针.
关键的功能,使F#代码好的是模式匹配的代数数据类型.代数数据类型例如是类型的声明Expression
(用于表示数学表达式),并且模式匹配match
是用于在实现简化或区分时检查各种已知情况的构造.
我不认为Clojure有任何内置的模式匹配支持,但它可以作为库实现.一个看起来很有趣的库是模式匹配模块(在Clojars中).这是一个使用它来实现代数评估器的例子(它非常接近F#文章).
F#文章中出现的另一件事是活动模式(允许您声明和重用模式).我不认为有一个Clojure库,但考虑到语言的灵活性,也应该可以实现它们(但是,它们在F#文章中并不是真正必要的)
Lisp在符号计算方面有着悠久的历史.请参阅Peter Norvig 撰写的AI案例研究书.Lisp提供了许多很棒的语言功能来抽象符号上的常见操作.有时您可以编写非常简洁的代码(比F#更简洁/更简洁).
像F#这样的静态语言在数据类型上具有强类型系统和方便的模式匹配.编译器可以找到类型系统捕获的错误,例如缺少考虑一个特殊情况.考虑使用数据的类型也可以减少运行时错误的可能性.F#中的类型推断也使F#代码非常简洁.