相关疑难解决方法(0)

像SymPy一样的Haskell库?

我需要操作像1 + sqrt(3)这样的表达式,并进行加法,减法和除法等基本算法.我希望结果是某种规范形式,以便它可以用作地图中的键.由于舍入问题,将1 + sqrt(3)转换为浮点是不可行的.

我在Python中使用SymPy来完成这项任务.Haskell有一个等效的本机库吗?

haskell symbolic-math computer-algebra-systems

30
推荐指数
2
解决办法
5857
查看次数

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 equality

14
推荐指数
2
解决办法
4429
查看次数

是否有可能根据具体情况定义更高阶的"相反"函数?

我是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

并在我想要的时候添加到此列表中.显然我不能这样做,但有一些非可怕的方法来达到同样的效果吗?

haskell

7
推荐指数
2
解决办法
328
查看次数

Scala中的反函数

有没有办法表达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仅用于示例我正在寻找解决此类任务的通用方法

谢谢!

scala function inverse

6
推荐指数
1
解决办法
6281
查看次数