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
,永远不会为真。如果任何差异相等,您也会遇到问题。