car*_*nen 30 haskell symbolic-math computer-algebra-systems
我需要操作像1 + sqrt(3)这样的表达式,并进行加法,减法和除法等基本算法.我希望结果是某种规范形式,以便它可以用作地图中的键.由于舍入问题,将1 + sqrt(3)转换为浮点是不可行的.
我在Python中使用SymPy来完成这项任务.Haskell有一个等效的本机库吗?
您似乎正在寻找Haskell中的计算机代数系统(CAS).尽管在Haskell程序包/模块的名称中有如此多的代数对象的引用,但我从来没有听说过Haskell中的通用且维护良好的CA系统(如Python中的SymPy或Sage).
然而,在维基百科上的计算机代数系统列表中,我发现了一个参考
它使用非标准许可证,但我敢说它仍然是开源的(虽然有重命名和归属要求).截至2010年7月docon-2.11
仍然使用GHC 6.12.1构建并运行演示/测试(我只需LANGUAGE FlexibleContexts
在示例的一个文件中插入一个pragma).
DoCon有详细记录(手册362页).它的手册里面有拉链包装,所以为了方便,我把它单独放在网上:
请仔细检查以确定它是否符合您的需求.
请检查该numbers
包.如果您只需要存储"1 +√3"等确切数字,则可能需要使用Data.Number.CReal而不是符号算术.它存储表达式,并且可以在需要时计算为任意数量的数字.
Prelude Data.Number.CReal> let cx = 1 + sqrt (3 :: CReal)
Prelude Data.Number.CReal> showCReal 400 cx
"2.7320508075688772935274463415058723669428052538103806280558069794519330169088000370811461867572485756756261414154067030299699450949989524788116555120943736485280932319023055820679748201010846749232650153123432669033228866506722546689218379712270471316603678615880190499865373798593894676503475065760507566183481296061009476021871903250831458295239598329977898245082887144638329173472241639845878553977"
Run Code Online (Sandbox Code Playgroud)
包中还有一个Data.Number.Symbolic模块,但描述中"它主要用于调试".