私はマージソート機能を構築しています。私の分割方法は私に値制限エラーを与えています。私は2つの蓄積パラメータを使用しています、2つのリストは分割の結果、私は戻り値の最後にタプルにパッケージ化します。しかし、私は値の制限エラーを取得していると私は問題が何であるか把握することはできません。誰にもアイデアはありますか? let split lst =
let a = []
let b
私はF#関数を持っている: let removeEven (listToGoUnder : _ list) =
let rec listRec list x =
match list with
| [] -> []
| head::tail when (x%2 = 0) -> head :: listRec (tail) (x+1)
| h
の値の制限では、タイプの安全性を損なう可能性のあるコンテキストでのタイプの一般化が防止されます。コアの問題は、このOCamlのコードで、例えばように、配列決定、突然変異および多型の種類を組み合わせることから生じると思われる: let x = ref [];; (* value restriction prevents generalization here *)
x := 1::!x;; (
Seq.generateUniqueのコードは((Assembly -> seq<Assembly>) -> seq<Assembly> -> seq<Assembly>)であることが制限されています。 open System
open System.Collections.Generic
open System.Reflection
module Seq =
let gener
弱い多型に関して少し混乱しています。OCamlです。コンパイラは、ポリモーフィック型の'a -> 'aを推測することができ、かつcacheが局部的に使用されている let remember x =
let cache = ref None in
match !cache with
| Some y -> y
| None -> cache := Som
機能(my_path_mapper)は値の制限を受けません。 # let rec my_map ~f l =
match l with
[] -> []
| h::t -> f h::my_map f t;;
val my_map : f:('a -> 'b) -> 'a list -> 'b list = <fun>
# let my_path_map
F#の値制限がどのように機能するのか分かりません。私はwikiとMSDN documentationの説明を読んだ。私は理解していないことである。 例えば、これは私に(this質問から撮影)値の制限のエラーを与えるなぜ、: let toleq (e:float<_>) a b = (abs (a - b)) < e
しかし、THSはしていません: これは、すべての権利を一般化され let to