2017-08-07 36 views
-2

到目前为止,我已经设置了很多东西,但那个笨笨的printfn仍然无法正常工作。F#数组总和不能打印

open System 

[<EntryPoint>] 
let main argv = 
    let n = Console.ReadLine() |> int 
    let nums = seq { for i in 1..n -> Console.ReadLine() |> int } 
    printfn "%d" (Seq.sum nums) 
    0 
+0

放在最后一个0 ? –

+0

主要需要返回一个int,而printfn是单位我认为 –

+0

0修正了错误,但由于某种原因,数组总和仍然不工作。我有一个警告,说:“行(8,9)这个表达式的结果被隐式忽略了,考虑使用'ignore'来显式的丢弃这个值,例如'expr |> ignore''或'let'来将结果绑定到一个名字,例如'let result = expr'。“ –

回答

1

两件事情,我注意到,你需要用0来结束程序,那就是退出代码。 第二件事是FSharp中的等号不用于更新值,F#使用< - 运算符代替。这是您的程序更新的更改。

open System 

[<EntryPoint>] 
let main argv = 
    let mutable sum = 0 
    let n = Console.ReadLine() |> int 
    for i in 1..n do 
     let mutable r = Console.ReadLine() |> int 
     sum <- sum + r; 
    printfn "%d" sum 
    0 
+0

谢谢,没有更多的警告或错误,但数组总和仍然工作出于某种原因。就像它不打印出一个值。 –

+0

你在.fsx文件或者fs文件中运行这个吗? – JosephStevens

2

Joseph的答案解释了你的代码有什么问题。

如果你想以更多的F#方式做到这一点,那么你可能想完全消除突变。这样做的一个相当不错的方式是使用序列的表达来构建所有你从控制台读取,然后使用Seq.sum来计算的总和数字的序列:

[<EntryPoint>] 
let main argv = 
    let n = Console.ReadLine() |> int 
    let nums = seq { for i in 1..n -> Console.ReadLine() |> int } 
    printfn "%d" (Seq.sum nums) 
    0 
+0

谢谢,但不幸的是,打印仍然无法正常工作。我的意思是,除了printfn之外,应该设置所有内容。 –

+0

@AlexZhuravel“不工作”是什么意思? –

+0

由于某种原因,不打印出来。图片在这里:https://prnt.sc/g5ow1v –