2017-10-31 3 views
1

私は前の行(TMP)のリストを使用して、パスカルの三角形を生成しようとしているので、同様に、この場合には、リストと一致の大きさを評価したいよ:評価に合致しないのはなぜですか?

(* b is the index pos I'm generating at the moment *) 
(* I need a function I can pass into another function, so the case must evaluate at runtime *) 

fun b -> match b with 
| 0 -> 1 
| List.length tmp -> 1 
| _ -> (* Ignore this part *) 

をしない理由2行目の評価と一致?

答えて

2

OCamlの一致はパターンがコンパイル時に知られている定数なので非常に効率的です。実行時に計算された値と比較するには、ifを使用できます。

matchにもwhenという句があり、最初の一致を行った後に式の値をテストできます。これはifに相当しますが、場合によってはよりクリーンです。

1

List.length tmpはパターンではありません。これは式です。 matchはパターンのみで動作します。 参照patterns

+0

どのように式をパターンに変換できますか? – Swift142

0

ここでパターンはありません。評価する条件式の値のみが使用されます。

if b = 0 then 1 else 
    if b = (List.length tmp) then 1 else 
    whatever expression 
関連する問題