如何使用f#</type>将Seq <type>值打印到控制台

时间:2013-10-28 14:13:57

标签: types f# console printf

我尝试打印到控制台,一系列类型。类型定义为:

// (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#相当新,任何建议我都会感激不尽。感谢。

3 个答案:

答案 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返回类型表明,执行了一些副作用,在这种情况下,会在屏幕上显示一些副作用。

相比之下,您的投影仅在必要时才会按需执行。