F#-要求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 ()

我是编程新手,所以这应该是一个简单的过程

我想写一个代码,要求3个数字,然后找到最小值。诸如此类:

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
所期望的