gpt4 book ai didi

f# - 打印到控制台并处理数组

转载 作者:行者123 更新时间:2023-12-05 01:29:24 25 4
gpt4 key购买 nike

我正在处理存储在数组中的大量对象。此处理需要很长时间,我希望能够监控 fx 是否处于处理步骤中。

我的目标是能够在继续操作的同时向控制台打印某种Processing thing number *x*。例如,有了这个

let x = [|1..10..100000|]

x
|> Array.mapi (fun i n -> (i, n))
|> Array.map (fun (i, n) -> printfn "Processing n %i" i, (n * 2)))
|> Array.map snd

我得到每一行的输出。我希望每第 10 次、第 100 次或第 1000 次打印一个语句,而不是每一行。所以我试过了

x 
|> Array.mapi (fun i n -> (i, n))
|> Array.map (fun (i, n) -> (if (i % 100 = 0) then printfn "Processing n %i" i, (n * 2)))
|> Array.map snd

但这在 printfn... 位上提供了错误

The 'if' expression is missing an else branch. The 'then' branch has type
''a * 'b'. Because 'if' is an expression, and not a statement, add an 'else'
branch which returns a value of the same type.

我基本上希望 else... 分支什么也不做,什么都不打印到控制台,只是被忽略。

有趣的是,在写这个问题并在 FSI 中尝试一些东西时,我尝试了这个:

x 
|> Array.mapi (fun i n -> (i, n))
|> Array.map (fun (i, n) -> match (i % 100 = 0) with
| true -> printfn "Processing n %i" i, (n * 2)
| false -> (), n * 2)
|> Array.map snd

这似乎有效。这是提供控制台文本的最佳方式吗?

最佳答案

看起来你想要:

let x' = x |> Array.mapi (fun i n ->
if i % 100 = 0 then
printfn "Processing n %i" i
n)

if 表达式的两个分支必须具有相同的类型并且

if (i % 100 = 0) then printfn "Processing n %i" i, (n * 2)

返回类型为 (unit, int) 的真实情况的值。缺少的 else 案例隐式具有类型 () 因此类型不匹配。您可以只打印值,忽略结果,然后返回当前值。

关于f# - 打印到控制台并处理数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43547596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com