2016-11-11 11 views
1

Я новичок в F # и попробовал простое приложение калькулятора. Я беру ввод от пользователя, и я хочу, чтобы определенные функции выполнялись в соответствии с вводом. Прямо сейчас, всякий раз, когда я беру любые данные от пользователя, программа выполняет сверху вниз. Я хочу, чтобы он выполнял только определенные функции, соответствующие входу. Например, если ввод равен 6, тогда должно выполняться тело scienceFun(). Сейчас он выполняет все функции. Пожалуйста, помогите, я как бы застрял на этом! КодКак выполнить определенные функции с шаблоном ввода в языке F #

open System 

let mutable ok = true 
while ok do 
    Console.WriteLine("Choose a operation:\n1.Addition\n2.Substraction\n3.Multiplication\n4.Division\n5.Modulo\n6.Scientific") 
    let input= Console.ReadLine() 

    let add = 
     Console.WriteLine("Ok, how many numbers?") 
     let mutable count = int32(Console.ReadLine()) 
     let numberArray = Array.create count 0.0 
     for i in 0 .. numberArray.Length - 1 do 
      let no = float(Console.ReadLine()) 
      Array.set numberArray i no  
    Array.sum numberArray 
    let sub x y = x - y 
    let mul x y = x * y 
    let div x y = x/y 
    let MOD x y = x % y 
    let scientificFun() = 
     printfn("1. Exponential") 
    match input with 
    | "1" -> printfn("The Result is: %f") (add) 
    | "6" -> (scientificFun()) 
    | _-> printfn("Choose between 1 and 6") 
    Console.WriteLine("Would you like to use the calculator again? y/n") 
    let ans = Console.ReadLine() 
    if ans = "n" then 
     ok <- false 
    else Console.Clear() 
+1

Вы новичок в F # или программируете вообще? –

+1

new to f # или функциональная парадигма –

+0

Интерес: [REPL] (https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop) –

ответ

3

Вы должны определить add как функция: let add() = или let add inputNumbers =

В противном случае это упрощенная версия ниже только выполняет функции, соответствующие номеру входного:

open System 

[<EntryPoint>] 
let main argv = 


    // define your functions 
    let hellofun() = 
     printfn "%A" "hello" 

    let worldfun() = 
     printfn "%A" "world" 


    let mutable cont = true 
    let run() = // set up the while loop 
     while cont do 
     printfn "%A" "\nChoose an operation:\n 1 hellofunc\n 2 worldfunc\n 3 exit" 
     let input = Console.ReadLine() // get the input 
     match input with // pattern match on the input to call the correct function 
     | "1" -> hellofun() 
     | "2" -> worldfun() 
     | "3" -> cont <- false;() 
     | _ -> failwith "Unknown input" 

    run() // kick-off the loop 
    0 

[<EntryPoint>] let main argv = является только необходимо, если вы его скомпилируете. В противном случае просто выполните run().