我需要操作像1 + sqrt(3)这样的表达式,并进行加法,减法和除法等基本算法.我希望结果是某种规范形式,以便它可以用作地图中的键.由于舍入问题,将1 + sqrt(3)转换为浮点是不可行的.
我在Python中使用SymPy来完成这项任务.Haskell有一个等效的本机库吗?
我试图定义一个函数,它将获取一个Double -> Double函数并返回其数学导数.我尝试过以下操作:
der :: (Double -> Double) -> (Double -> Double)
der f
| f == exp = exp
| otherwise = undefined
Run Code Online (Sandbox Code Playgroud)
但哈斯克尔不支持==的Double -> Double值.我在Haskell尝试做什么是不可能的?
我是Haskell的新手.我试图在Haskell中创建一个迷你语言,并希望尽可能使用一个高阶函数opp(简称为"对立")将一些熟悉的函数转换为明显的对立面.例如,opp succ将是函数pred,opp head将是last,等等.我没有一些关于将函数转换为相反函数的含义的一般定义:我只想选择几个关键示例并声明它们的对立面.所以我想要一个几乎没有定义的高度多态函数.
困难似乎是我想通过他们的名字而不是他们的本质来识别这些功能(可以这么说).这种困难的一个表现就是如果我写的话
opp succ = pred
然后Haskell视为succ一个变量,因此给了我一个始终取值的常数函数pred.我真正想要的是说更多的话,"如果你看到这个字符串,opp succ那么就把它想象成另一个名字pred." 但经过一段时间的搜索,我无法找到如何做到这一点(如果可能的话).
总而言之,我想定义一个函数
opp :: (a -> b) -> (a -> b)
通过说出类似的话
opp succ = pred
opp pred = succ
opp head = last
opp last = head
并在我想要的时候添加到此列表中.显然我不能这样做,但有一些非可怕的方法来达到同样的效果吗?
有没有办法表达scala中任何函数的反函数?
例如,如果我有这样的函数f
(x:Int)=> x + 1
我想能够编写一个反函数g
(f(x):Int)=> x //不是有效的scala语法
要么
(x:Int)=> inverse(f(x))// inverse将返回(x => x -1)
你知道在scala中做这种事情的方法吗?
NB = x => x + 1仅用于示例我正在寻找解决此类任务的通用方法
谢谢!