F#-要求3个数字,然后找到最小值?
我是编程新手,所以这应该是一个简单的过程 我想写一个代码,要求3个数字,然后找到最小值。诸如此类:F#-要求3个数字,然后找到最小值?,f#,F#,我是编程新手,所以这应该是一个简单的过程 我想写一个代码,要求3个数字,然后找到最小值。诸如此类: let main(): Unit = putline ("Please enter 3 numbers:") putline ("First number: ") let a = getline () putline ("Second number: ") let b = getline ()
let main(): Unit =
putline ("Please enter 3 numbers:")
putline ("First number: ")
let a = getline ()
putline ("Second number: ")
let b = getline ()
putline("Third number: ")
let c = getline ()
if (a<b && a<c) then putline ("Minimum:" + a)
elif (b<c && b<a) then putline ("Minimum:" + b)
else putline ("Minimum:" + c)
let main():单位=
putline(“请输入3个数字:”)
putline(“第一个数字:”)
设a=getline()
putline(“第二个数字:”)
设b=getline()
putline(“第三个数字:”)
设c=getline()
if(a首先是你的putline
函数。我假设它应该取一个值,并用换行符将其打印到控制台,因此内置的F#命令是printfn
,你可以这样使用它:
let a = 1
printfn "Minimum: %d" a
let putline s = printfn "%s" s
%d
将替换为a
的值,因为在本例中,a是一个整数。您将使用%f表示浮点,%s表示字符串…详细信息将在文档中提供
因此,我们可以像这样编写您的putline
函数:
let a = 1
printfn "Minimum: %d" a
let putline s = printfn "%s" s
此函数具有以下签名:val putline:s:string->unit
,它接受字符串,但不返回任何内容。这就引出了下一个问题,您可以尝试说putline(“最小值:+a”)
。这不起作用,因为添加数字和字符串是不允许的,所以您可以将a
转换为字符串,您有几种方法可以做到这一点:
putline (sprintf "Minimum: %d" a)
putline ("Minimum:" + a.ToString())
sprintf
与printfn
相关,但它返回一个字符串而不是打印到控制台,a.ToString()
将a
转换为一个字符串,允许它与前面的字符串连接。但是,只需使用printfn
而不是putline
就可以了
你还有一个逻辑问题,你不考虑A==B==C的情况,什么是1,1,3的最小值?你的代码会是3。试试使用<代码> > p>你可以使用函数f <代码> min <代码>,这给了你最小的两个值。
min12//1
要获得至少三个值,您可以使用它两次:
min(min a b)c
用F#piping写这篇文章的更简洁的方法是:
a |>最小b |>最小c
或者,将项目放入列表并使用list.min
:
[a;b;c]|>List.min
< /代码> 如果由于某种原因,您决定扩展超过三个数字,则可以考虑使用<代码> SEQ。
let xs = [0;-5;3;4]
xs
|> Seq.reduce min
|> printfn "%d"
// prints -5 to stdout
您可以使用min
作为减速机,因为它接受两个参数,这正是Seq.reduce
所期望的