Как мне представить нулевое значение в типе с плавающей точкой для Ocaml - PullRequest
5 голосов
/ 16 февраля 2011

Я знаю, что это может показаться очень простым, но в основном, я хочу сказать, при сопоставлении с образцом

match value with
  Null-> failwith "Empty"
 |value-> #do something

Я пробовал любой вариант с нулевым или нулевым, а также пробовал юнит, который не может быть использован, потому что значение является плавающим.

Я в тупике, и любая помощь будет оценена

Ответы [ 2 ]

11 голосов
/ 16 февраля 2011

Вы не можете.Это выбор дизайна.Многие языки позволяют любому значению быть нулевым.Проблема с этим подходом состоит в том, что значения являются нулевыми, когда программист не ожидает этого, или код должен быть завален проверками каждого входного значения на нулевые значения.

OCaml использует подход, который, еслизначение может быть нулевым, тогда оно должно быть явно помечено как таковое.Это делается с параметром типа:

match value with
  | None -> failwith "Empty"
  | Some value -> (* do something *)

Однако, если вы подставите это непосредственно в вашу программу, если не удастся скомпилировать, потому что OCaml обнаружит, что это «значение» не может быть на самом деле нулевым.Все, что создается, необходимо обновить, чтобы указать, когда возвращается «нулевое» значение (Нет):

let safe_divide numerator denominator =
  if denominator <> 0. then
    Some (numerator /. denominator)
  else
    None (* division by zero *)
2 голосов
/ 16 февраля 2011

Как сказал Делнан, в OCaml нет null. Что вы можете сделать, если это подходит для вашей проблемы, это использовать параметры сопоставления с шаблоном, например:

let your_function x = 
   match x with
    | None -> failwith "Empty"
    | Some f -> #do something
...