【发布时间】:2018-09-25 06:06:24
【问题描述】:
我有一个函数getN',它应该递归地构造一个包含 n 个元素的列表,但是我认为我做错了什么,因为我无法对其进行索引并且输出看起来出乎意料:
getN' : (Double -> Double -> Double) -> Double -> Double -> Double -> Int -> List Double
getN' f dt t0 y0 0 = []
getN' f dt t0 y0 n = rk4' :: getN' f dt (t0+dt) rk4' (n-1) where
rk4' = rk4 f dt t0 y0
getN' f 0.1 0 1 100 的输出为:
1.0050062486962987 :: getN' f 0.1 0.1 1.0050062486962987 99 : List Double
这对我来说似乎很陌生。特别是语法 head::tail 很熟悉,但 Idris 通常会在 REPL 中打印出整个结果,这表明在这种情况下有些地方不正确。
index 0 $ getN' f 0.1 0 1 100 的输出为:
(input):1:9:When checking argument ok to function Prelude.List.index:
Can't find a value of type
InBounds 0 (getN' f 0.1 0.0 1.0 100)
我在做什么/做错了什么?
【问题讨论】:
标签: list recursion functional-programming idris