我正在尝试创建一个接收一系列双精度(Double,Double)和一个n(Int)的函数,其中我将此区间分成n个相等的部分。我知道如果它是一个列表,我在列表中做了一个Split,但是在元组中获得双打,我不知道该怎么做。 感谢您的帮助
答案 0 :(得分:2)
这与@ mschmidt的答案类似,但我认为列表理解可能是最清楚的:
> intervals 4 (1,10)
[(1.0,3.25),(3.25,5.5),(5.5,7.75),(7.75,10.0)]
>
,并提供:
intervals' :: Int -> (Double,Double) -> [(Double,Double)]
intervals' n (a,b) =
let n' = fromIntegral n
d = (b - a) / n'
x = [a + i*d | i <- [0..n']]
in zip x (tail x)
如果端点的重复计算冒犯了您,您可以写:
zip x (tail x)
请注意> let x = [1,2,3,4] in zip x (tail x)
[(1,2),(2,3),(3,4)]
>
是一种非常标准的方法来获取连续的列表对的元组:
Starting /Users/sgb/build-imagenes-Desktop_Qt_5_9_1_clang_64bit-
Debug/NBasic.app/Contents/MacOS/NBasic...
dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from:
/System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Expected in: /usr/local/lib/libJPEG.dylib
in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
The program has unexpectedly finished.
答案 1 :(得分:1)
粗略草图,可能不是最优雅的解决方案:
l
和u
)并计算输入范围/间隔的宽度。n
的{{1}}输出范围。通过将输入宽度除以w
来计算此w
。n
的列表,其中包含值n
,l+0*w
,l+1*w
,...