3

次の OCaml コードを検討してください。

let coupe_inter i j cases =
  let lcases = Array.length cases in
  let low,_,_ = cases.(i)
  and _,high,_ = cases.(j) in
  low,high,
  Array.sub cases i (j-i+1),
  case_append (Array.sub cases 0 i) (Array.sub cases (j+1) (lcases-(j+1)))

let ... and ... in式がシーケンスの代わりに使用されるのはなぜですかlet ... in let ... in(F# で強制されるように)。この構文は、OCaml コードではかなり頻繁に見られます。ありがとう!

4

2 に答える 2

4

let x = a and y = b in cxy「同時に」を定義する効果があります。これは、評価の順序 ( aafter または before b) が指定されておらず ( が前に評価されると想定してはならない)、 にバインドされておらず、 にバインドされていないことを意味します。これらは でのみ使用できます。axbyac

過去に評価順のことで噛まれたことがあるので、私はこの構造をめったに使用しません。ただし、相互に再帰的な関数を定義するために、再帰的なバリアントlet rec ... and ... in ...(すべての変数のバインドがどこでも使用できる場合) をよく使用します。

let rec even n = (n = 0) || odd (n - 1)
and odd n = (n <> 0) && even (n - 1)
于 2012-09-08T14:34:49.350 に答える
2

F#let ... and ...では禁止されていますが、それでも次のように記述できます。

let rec low,_,_ = cases.[i]
and _,high,_ = cases.[j]

@gaschelet rec ... and ...が言ったように、主に相互に再帰的な関数/型を定義するために使用されます。letシーケンスを使用すると、より直感的でエラーが発生しにくくなるため、優先する必要があると思います。

于 2012-09-08T14:42:54.237 に答える