我尝试打印到控制台,一系列类型。类型定义为:
// (x,y,z,vx,vy,vz,m)
type Body = Body of double * double * double * double * double * double * double
这是怎么做到的?我首先定义了以下功能:
let pv ls = Seq.map (fun st -> printf "%f" st) ls
我对F#相当新,任何建议我都会感激不尽。感谢。
答案 0 :(得分:3)
如果要将序列的值打印到控制台,可以这样做:
Seq.iter (printfn "%A") ls
您不需要将序列映射到另一个序列,只需迭代它并打印每个值。
但我不确定这是否是你要求的。你能澄清这个问题吗?
答案 1 :(得分:1)
请注意,Seq.map
需要seq<'a>
并将函数应用于'a
并返回seq<'b>
。您可以将Seq.map
视为LINQ中的Select
函数,它确实会返回一个新列表。
在你的情况下,你拥有的是一种类型。这不是一个清单。所以你可以在这里忘记迭代,并考虑以下内容:
type Body = Body of string * int * string;;
给你:
type Body = | Body of string * int * string
然后,填充这样的类型:
let b = Body("string value1", 5, "string value2")
给你:
val b : Body = Body ("string value1", 5, "string value2")
最后,您可以使用printfn
函数打印它:
printfn "the body is %A" b
你完成了!
请注意,我使用%A
作为打印功能的占位符,%A
是通用的,它需要一个对象而不是%s
,它需要一个字符串或%d
需要一个整数
答案 2 :(得分:0)
Seq.map
只是一个预测。查看返回类型是映射函数的结果。而Seq.iter
实际上执行了'a -> unit
类型的函数。
unit
返回类型表明,执行了一些副作用,在这种情况下,会在屏幕上显示一些副作用。
相比之下,您的投影仅在必要时才会按需执行。