0

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

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

4

3 回答 3

4

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?

于 2013-10-28T14:41:57.670 回答
1

请注意,Seq.map接受 aseq<'a>并将函数应用于'a并返回 a seq<'b>。您可以将Seq.map其视为SelectLINQ 中的函数,它确实返回了一个新列表。

就您而言,您拥有的是一种类型。这不是一个清单。因此,您可以暂时忘记迭代并考虑以下内容:

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整数

于 2013-10-28T15:12:30.743 回答
0

Seq.map只是一个投影。查看返回类型是映射函数的结果。而Seq.iter实际上执行你的 type 函数'a -> unit

返回类型表明执行unit了一些副作用,在这种情况下,某些内容会打印到屏幕上。

相反,您的投影仅在必要时按需延迟执行。

于 2013-10-28T14:47:29.607 回答