我是F#的新人,我不明白下一个错误:
let g = 9.8
let v = 320.0
let a = 45.0
let iterations = List.unfold(fun x-> if x < 100.0 then Some(x,x+0.1) else None) 0.0
type point = {x:float;y:float}
let tPoints = List.map(fun t -> {x=v*t*cos(a); y=v*t*sin(a)-g*(t**2.0);})
for point in tPoints do
printfn "%A" point
在线:
for point in tPoints do
类型&#39;(浮点列表 - &gt;点列表)&#39;不是一种类型,其值可以使用此语法枚举,即与seq&lt; &gt;,IEnumerable&lt; &gt;不兼容。或IEnumerable,并没有GetEnumerator方法fs
tPoints|>List.iter(fun p->printfn "%A" p)
以这种方式,它也不起作用
答案 0 :(得分:3)
tPoints
不是列表,而是函数。
List.map
接受两个参数 - 一个函数和一个列表, - 并返回一个列表。你只给了它一个参数,所以返回值是一个仍在“等待”第二个参数的函数。
该函数的类型为(float list -> point list)
- 也就是说,它期望类型为float list
的参数并返回point list
。您正在尝试迭代该函数,这就是编译器告诉您不能执行的操作:无法枚举float list类型的值 - &gt;点列表。
我想你的意思是将iterations
传递给它:
let tPoints = List.map(fun t -> {x=v*t*cos(a); y=v*t*sin(a)-g*(t**2.0);}) iterations