рекурсивное сопоставление с параметрами - PullRequest
0 голосов
/ 04 октября 2018

Когда вы создаете паттерн сопоставления в OCaml и возвращаете тип опции, вы заставляете ваш паттерн возвращать Some x или None.Если ваш шаблон возвращает функцию (рекурсивно), вам нужно было бы поставить Some перед ней?Позвольте мне сделать это более ясным:

пример кода:

let rec whatt (c: coding) : bool option = 
match c with
|a(a) -> Some a
|b(b) -> None
|d(x,s,l) -> Some whatt x and Some whatt s and Some whatt l 

Я не уверен А.), если вам понадобится Some из-за некоторой ценности, которую вы получаете иположить обратно в функцию и B.) Я не уверен, синтаксис разделения возвращаемых значений в последней строке.И & &, ||

1 Ответ

0 голосов
/ 04 октября 2018

OK, оператор "и" в OCaml равен &&.Поскольку аргументы bool, а не bool opt, у вас не может быть выражения Some x && Some y.

Более того, ваша функция whatt (по гипотезе) уже возвращает bool opt.Так что вам не нужно применять Some к нему, чтобы получить bool opt.Другими словами, Some (whatt x) имеет тип bool opt opt, который еще дальше от работы.

В-третьих, вам нужно решить, каким будет значение вашего результата, если whatt вернет None.Допустим, вы хотите обработать Some false и None как фактически ложные.Тогда вы могли бы написать что-то вроде этого:

let bvalue = function Some b -> b | None -> false

bvalue (whatt x) && bvalue (whatt s) && bvalue (whatt l)

Возможно, это не совсем то, что вы ищете, но, возможно, это даст вам некоторые идеи.

...