我主要工作在C#中,并且是F#/函数语言的新手,我遇到了一个非常简单的程序问题。 我有一个函数用两个整数字段创建一条记录。在match
内选择字段System.Random.NextDouble
以符合某些概率。然后我有一个for循环,应该运行四次createCustomer
函数。在for循环中返回记录的F#调用函数只执行一次
我遇到的问题是Customer
对于for循环的所有10次迭代都是一样的,getIATime
中的printfn
似乎只执行一次。
Program.fs
open Simulation
[<EntryPoint>]
let main argv =
printfn "%A" argv
printfn "Test"
for i in 1 .. 10 do
let mutable customer = createCustomer
printfn "i: %d\tIA: %d\tService: %d" i customer.interArrivalTime customer.serviceTime
ignore (System.Console.ReadLine()) //Wait for keypress @ the end
0 // return an integer exit code
Simulation.fs
module Simulation
type Customer = {
interArrivalTime: int
serviceTime: int
}
let createCustomer =
let getRand =
let random = new System.Random()
fun() -> random.NextDouble()
let getIATime rand =
printf "Random was: %f\n" rand
match rand with
| rand when rand <= 0.09 -> 0
| rand when rand <= 0.26 -> 1
| rand when rand <= 0.53 -> 2
| rand when rand <= 0.73 -> 3
| rand when rand <= 0.88 -> 4
| rand when rand <= 1.0 -> 5
let getServiceTime rand =
match rand with
| rand when rand <= 0.2 -> 1
| rand when rand <= 0.6 -> 2
| rand when rand <= 0.88 -> 3
| rand when rand <= 1.0 -> 4
{interArrivalTime = getIATime (getRand()); serviceTime = getServiceTime (getRand())}
你不需要在循环中说,“可变”关键字。在这种情况下,它与C#一样。如果你要在C#中的一个循环中声明一个变量,它不会是同一个变量,而是每个循环迭代的新变量。 –
好的电话,忘了我甚至在那里。我曾尝试添加它以查看它是否能解决我遇到的问题 – WereGoingOcean
如果您要进行代码审查,还会滥用“匹配”。 –