私は主にC#で動作し、F#/関数言語の新バージョンであり、かなりシンプルなプログラムに問題があります。 私は2つの整数フィールドを持つレコードを作成する関数を持っています。フィールドは、System.Random.NextDouble
がmatch
の範囲内で選択され、特定の確率と揃う。私はその後、createCustomer
関数を4回実行するべきforループを持っています。F#forループ内のレコードを返す呼び出し関数
私がいる問題は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
あなたがコードのレビューをするつもりならば、 'match'の悪用もあります。 –