Как создать функциональные и рекурсивные типы данных в javascript?Функциональные типы данных в javascript
Я хотел бы быть в состоянии сделать что-то вроде ML:
datatype binary_node = Node of binary_node*binary_node
| Lead of int
Некоторое время назад я взял курс в функциональном программировании - курс был по каким-то случайным причинам, на схеме, и мы построили datatypes, создавая канистры, начиная с названия типа данных и затем «полезной нагрузки», является ли это способом создания типов данных типа программирования в Javascript?
construct_node(n1,n2) ->
("Node", n1, n2).
construct_leaf(int_value) ->
("Leaf", int_value).
, а затем тип проверки:
is_node(n) ->
if (n[0] == "Node") ->
is_binary_tree(n[1]) and is_binary_tree(n[2])
else
false
is_leaf(l) ->
if(l[0] == "Leaf") ->
is_integer(n[1])
else
false
is_binary_tree(t) ->
is_node(t) or is_leaf(t)
Что бы самый умный способ сделать это в JavaScript?
Стоимость ваших предикатами являются линейными по размеру дерева, который будет делать обход где вы проверяете на каждом узле стоимость экспоненциально. (Кроме того, я рекомендую избегать бессмысленных терминов, таких как «утиная печать».) –
Мне нравится термин «утиный тип», я буду в будущем использовать его в газетах :-) –
@ AndreasRossberg Я не уверен, зачем вам нужно для проверки каждого узла дерева при обходе этого же дерева. Можете ли вы привести практический пример? Кроме того, я не согласен с «утиным набором текста» - я считаю, что это довольно значимый (если не очень точный) термин, но я был бы рад услышать ваши предложения по терминологии. –