我正在尝试打印到控制台,一系列类型。类型定义为:
// (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# 相当陌生,任何建议我都会感激不尽。谢谢。
If you want to print the values of a sequence to the console, you can do it this way:
Seq.iter (printfn "%A") ls
You do not need to map the sequence to another sequence, just iterate over it and print each value.
I am however not exactly sure if this is what you asked for. Can you clarify the question?
请注意,Seq.map
接受 aseq<'a>
并将函数应用于'a
并返回 a seq<'b>
。您可以将Seq.map
其视为Select
LINQ 中的函数,它确实返回了一个新列表。
就您而言,您拥有的是一种类型。这不是一个清单。因此,您可以暂时忘记迭代并考虑以下内容:
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
整数
Seq.map
只是一个投影。查看返回类型是映射函数的结果。而Seq.iter
实际上执行你的 type 函数'a -> unit
。
返回类型表明执行unit
了一些副作用,在这种情况下,某些内容会打印到屏幕上。
相反,您的投影仅在必要时按需延迟执行。