在Haskell中调用函数前缀与中缀

在Haskell中调用函数前缀与中缀,haskell,factorization,Haskell,Factorization,我一直想学习Haskell,所以最近我开始解决这些问题。在编写下面的分解代码时,我注意到调用(/n)返回一个浮点值,而(n`div`)返回一个Int。我认为中缀符号只是Haskell中的语法糖?有人能解释一下发生了什么事吗?如果您有任何意见/建议/改进,我也将不胜感激,谢谢 import Data.List (sort) factor :: Int -> [Int] factor 0 = [1..] factor n = let f1 =

我一直想学习Haskell,所以最近我开始解决这些问题。在编写下面的分解代码时,我注意到调用
(/n)
返回一个
浮点值
,而
(n`div`)
返回一个
Int
。我认为中缀符号只是Haskell中的语法糖?有人能解释一下发生了什么事吗?如果您有任何意见/建议/改进,我也将不胜感激,谢谢

    import Data.List (sort)

    factor :: Int -> [Int]
    factor 0 = [1..]
    factor n =
        let f1 = [f | f <- [1..limit], n `mod` f == 0]
                where limit = ceiling $ sqrt $ fromIntegral n
            f2 = map (n `div`) f1   --vs. map (/ n) f1
        in sort $ f1 ++ f2
导入数据列表(排序)
因子::Int->[Int]
系数0=[1..]
因子n=

设f1=[f | f
div
/
是两个不同的函数:

  • /
    在类中定义,其含义是乘法的逆运算
  • div
    是在类中定义的,它的意思是整数的除法,截短为负无穷大

你说得对,中缀符号只是一种语法糖。表达式
x/y
(/)相同xy
,以及
div xy
x`div`y
相同,没有什么特别的地方。
div
函数是
Integral
类的一部分,并且根据您的显式类型签名,被更具体地推断为
Int
//code>操作符是
Frac>的一部分这是两个不同的函数,一个不是另一个的语法糖!

除了
/
div
有不同的类型外,
(/n)
“n”是分母,而
(n'div')
“n”是分子。