gpt4 book ai didi

haskell - Haskell 中的函数重载

转载 作者:行者123 更新时间:2023-12-02 14:21:04 30 4
gpt4 key购买 nike

我有一个以 m x + b 形式表示直线方程的结构和一个点的结构

Line { m :: Double, b :: Double } deriving( Show, Eq )
Point { x :: Double, y :: Double } deriving( Show, Eq )

我想要函数垂直执行以下操作:

perpendicular (Line m b) (Point x y) = 
Line m2 b2 where
m2 = (-1/m)
b2 = y - m2*x

如果给定一条线和一个点,或者部分应用的线

perpendicular (Line m b) = 
Line m2 where
m2 = (-1/m)

如果只给出一条线。

这里的问题是我得到

Equations for `perpendicular' have different numbers of arguments

最佳答案

Haskell 没有您在命令式语言中可能习惯的那种函数重载;我什至不确定如果允许的话类型推断是否仍然是可判定的。您可以获得的唯一一种重载是类型类,尽管这仍然不允许您定义采用不同数量参数的函数。

你的案例是一个很好的例子,说明了为什么这在 haskell 中不起作用;如果你有垂直的someLine,haskell 编译器应该如何找出你正在谈论的这些函数中的哪一个?在这种情况下,两者都有效,但表达式将具有不同的类型,具体取决于所选择的类型。

关于haskell - Haskell 中的函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23865239/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com