Function haskell向现有函数添加任何内容

Function haskell向现有函数添加任何内容,function,haskell,add,Function,Haskell,Add,嘿,使用这个脚本: smallestDifference3 :: Int -> Int -> Int -> Int smallestDifference3 a b c | ((differenceAB < differenceBC) && (differenceBC < differenceAC)) = differenceAB | ((differenceAB < differenceAC) && (diffe

嘿,使用这个脚本:

smallestDifference3 :: Int -> Int -> Int -> Int
smallestDifference3 a b c
    | ((differenceAB < differenceBC) && (differenceBC < differenceAC)) = differenceAB
    | ((differenceAB < differenceAC) && (differenceAC < differenceBC)) = differenceAB
    | ((differenceBC < differenceAB) && (differenceAB < differenceAC)) = differenceBC
    | ((differenceBC < differenceAC) && (differenceAC < differenceAB)) = differenceBC
    | ((differenceAC < differenceBC) && (differenceBC < differenceAB)) = differenceAC
    | ((differenceAC < differenceAB) && (differenceBC < differenceBC)) = differenceAC
  where differenceAB 
         | a < b = -(a - b)
         | otherwise    = a - b
        differenceBC
         | b < c = -(b - c)
         | otherwise    = b - c
        differenceAC
         | a < c = -(a - c)
         | otherwise    = a - c

我应该使用“smallestDifference3”-函数来获得这个结果,还是需要做什么?你好

引入一个接受列表的通用函数,即

然后从其他函数中使用它,例如

smallestDifference4 :: Int -> Int -> Int -> Int -> Int
smallestDifference4 a b c d = smallestDifference [a,b,c,d]
…当然,在这一点上,您可能希望完全放弃这些小函数,因为它们不会“发挥自身的作用”

也就是说,您可以在现有功能的基础上更多地实现此功能。其思想是,您需要一种方法来获取给定列表中所有可能的对,然后计算对成员的差异,然后选择其中的最小值

您需要一个“所有对”函数,如

pairs :: [a] -> [(a, a)]
pairs = concat . go
  where go [] = []
        go [x] = []
        go (x:xs) = map (\a -> (x,a)) xs : go xs
然后你可以像这样做

smallestDifference = minimum
                   . map abs
                   . map (uncurry (-))
                   . pairs

引入一个接受列表的泛型函数,即

然后从其他函数中使用它,例如

smallestDifference4 :: Int -> Int -> Int -> Int -> Int
smallestDifference4 a b c d = smallestDifference [a,b,c,d]
…当然,在这一点上,您可能希望完全放弃这些小函数,因为它们不会“发挥自身的作用”

也就是说,您可以在现有功能的基础上更多地实现此功能。其思想是,您需要一种方法来获取给定列表中所有可能的对,然后计算对成员的差异,然后选择其中的最小值

您需要一个“所有对”函数,如

pairs :: [a] -> [(a, a)]
pairs = concat . go
  where go [] = []
        go [x] = []
        go (x:xs) = map (\a -> (x,a)) xs : go xs
然后你可以像这样做

smallestDifference = minimum
                   . map abs
                   . map (uncurry (-))
                   . pairs

引入一个接受列表的泛型函数,即

然后从其他函数中使用它,例如

smallestDifference4 :: Int -> Int -> Int -> Int -> Int
smallestDifference4 a b c d = smallestDifference [a,b,c,d]
…当然,在这一点上,您可能希望完全放弃这些小函数,因为它们不会“发挥自身的作用”

也就是说,您可以在现有功能的基础上更多地实现此功能。其思想是,您需要一种方法来获取给定列表中所有可能的对,然后计算对成员的差异,然后选择其中的最小值

您需要一个“所有对”函数,如

pairs :: [a] -> [(a, a)]
pairs = concat . go
  where go [] = []
        go [x] = []
        go (x:xs) = map (\a -> (x,a)) xs : go xs
然后你可以像这样做

smallestDifference = minimum
                   . map abs
                   . map (uncurry (-))
                   . pairs

引入一个接受列表的泛型函数,即

然后从其他函数中使用它,例如

smallestDifference4 :: Int -> Int -> Int -> Int -> Int
smallestDifference4 a b c d = smallestDifference [a,b,c,d]
…当然,在这一点上,您可能希望完全放弃这些小函数,因为它们不会“发挥自身的作用”

也就是说,您可以在现有功能的基础上更多地实现此功能。其思想是,您需要一种方法来获取给定列表中所有可能的对,然后计算对成员的差异,然后选择其中的最小值

您需要一个“所有对”函数,如

pairs :: [a] -> [(a, a)]
pairs = concat . go
  where go [] = []
        go [x] = []
        go (x:xs) = map (\a -> (x,a)) xs : go xs
然后你可以像这样做

smallestDifference = minimum
                   . map abs
                   . map (uncurry (-))
                   . pairs


我不知道你的确切意思是什么,我应该在哪里实现“最小差异”功能?但是谢谢你加入这个帖子:)我对你的帖子投了更高的票,因为我认为你做得对,但是我不能把它添加到我的代码中,对不起:/
smallestDifference xs=minimum[abs(x-y)|x:ys@augustss Oops,在这里我认为我已经做了一个合理的工作…我没有想到使用
尾部
!我不知道你的确切意思是什么,我应该在哪里实现“最小差异3”-函数?但感谢您加入此线程:)我对您的帖子投了更高的票,因为我认为您的方式是正确的,但我无法将其添加到我的代码中,抱歉:/
smallestDifference xs=minimum[abs(x-y)|x:ys@augustss Oops,在这里我认为我已经做了一个合理的工作…我没有想到使用
尾部
!我不知道你的确切意思是什么,我应该在哪里实现“最小差异3”-函数?但感谢您加入此线程:)我对您的帖子投了更高的票,因为我认为您的方式是正确的,但我无法将其添加到我的代码中,抱歉:/
smallestDifference xs=minimum[abs(x-y)|x:ys@augustss Oops,在这里我认为我已经做了一个合理的工作…我没有想到使用
尾部
!我不知道你的确切意思是什么,我应该在哪里实现“最小差异3”-函数?但感谢您加入此线程:)我对您的帖子投了更高的票,因为我认为您的方式是正确的,但我无法将其添加到我的代码中,抱歉:/
smallestDifference xs=minimum[abs(x-y)|x:ys@augustss Oops,在这里我认为我已经做了一件合理的工作…我没有想到使用
尾部
!在上一个守卫中,你写了
differenceBC
,这永远不会是真的。如果任何差异相等,你也会遇到问题。在上一个守卫中,你写了
differenceBC
,永远不会为真。如果任何差异相等,您也会遇到问题。在上一个保护中,您编写的
differenceBC
,永远不会为真。如果任何差异相等,您也会遇到问题。在上一个保护中,您编写的
differenceBC
,永远不会为真。如果任何差异相等,您也会遇到问题。