Объяснение сопоставления с образцом и переключателем

Шаблоны дают вам небольшой sml язык для описания структуры sml значений, которые вы хотите sml сопоставить. Структура может f# быть сколь угодно глубокой, и standard-ml вы можете связывать переменные fsharp с частями структурированного standard-ml значения.

Это позволяет писать fsharp очень кратко. Вы можете проиллюстрировать standard-ml это небольшим примером, например ocaml производной функцией для fsharp простого типа математических f# выражений:

type expr =
    | Int of int
    | Var of string
    | Add of expr * expr
    | Mul of expr * expr;;

let rec d(f, x) =
    match f with
    | Var y when x=y -> Int 1
    | Int _ | Var _ -> Int 0
    | Add(f, g) -> Add(d(f, x), d(g, x))
    | Mul(f, g) -> Add(Mul(f, d(g, x)), Mul(g, d(f, x)));;

Кроме того, поскольку pattern-matching сопоставление с образцом ocaml является статической конструкцией fsharp для статических типов, компилятор standard-ml может (i) проверить, что pattern-matching вы охватили все случаи (ii) обнаружить standard-ml избыточные ветви, которые f# никогда не могут соответствовать sml какому-либо значению (iii) обеспечить sml очень эффективную реализацию f# (с прыжки и т. д.).

f#

pattern-matching

ocaml

sml

2022-07-10T22:01:12+00:00