value-restriction

    5

    1答えて

    私はマージソート機能を構築しています。私の分割方法は私に値制限エラーを与えています。私は2つの蓄積パラメータを使用しています、2つのリストは分割の結果、私は戻り値の最後にタプルにパッケージ化します。しかし、私は値の制限エラーを取得していると私は問題が何であるか把握することはできません。誰にもアイデアはありますか? let split lst = let a = [] let b

    5

    1答えて

    私は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

    1

    1答えて

    の値の制限では、タイプの安全性を損なう可能性のあるコンテキストでのタイプの一般化が防止されます。コアの問題は、このOCamlのコードで、例えばように、配列決定、突然変異および多型の種類を組み合わせることから生じると思われる: let x = ref [];; (* value restriction prevents generalization here *) x := 1::!x;; (

    2

    2答えて

    Seq.generateUniqueのコードは((Assembly -> seq<Assembly>) -> seq<Assembly> -> seq<Assembly>)であることが制限されています。 open System open System.Collections.Generic open System.Reflection module Seq = let gener

    2

    1答えて

    引数が空のリストの場合、リストモジュールの一部の関数が失敗します。 List.revは例です。問題は恐ろしい値の制限です。 let takeAllButLast (xs: 'a list) = xs |> List.take (xs.Length - 1) 機能が空リストでうまく動作しますが、扱うでしょうバージョン:すべてが、リストの最後の要素でリストを返す関数を定義しようとしている

    7

    3答えて

    弱い多型に関して少し混乱しています。OCamlです。コンパイラは、ポリモーフィック型の'a -> 'aを推測することができ、かつcacheが局部的に使用されている let remember x = let cache = ref None in match !cache with | Some y -> y | None -> cache := Som

    1

    3答えて

    let csvList startDelim endDelim lst memF = let listIter (listStr: string) item = if listStr.Length > 0 then listStr + "," + (memF item) else memF item sta

    2

    1答えて

    機能(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

    18

    3答えて

    F#の値制限がどのように機能するのか分かりません。私はwikiとMSDN documentationの説明を読んだ。私は理解していないことである。 例えば、これは私に(this質問から撮影)値の制限のエラーを与えるなぜ、: let toleq (e:float<_>) a b = (abs (a - b)) < e しかし、THSはしていません: これは、すべての権利を一般化され let to