Конструктор (функциональное программирование): различия между версиями
Материал из Поле цифровой дидактики
Patarakin (обсуждение | вклад) |
Patarakin (обсуждение | вклад) |
||
Строка 5: | Строка 5: | ||
== Пример == | == Пример == | ||
Простейшую структуру [[XML]]-документа в [[Standard ML]] можно определить следующим образом< | Простейшую структуру [[XML]]-документа в [[Standard ML]] можно определить следующим образом< | ||
<syntaxhighlight lang="ocaml" line> | |||
< | |||
datatype simple_xml = Empty | datatype simple_xml = Empty | ||
| Word of string | | Word of string | ||
| Tagged of string * simple_xml list | | Tagged of string * simple_xml list | ||
</ | </syntaxhighlight> | ||
Конструкторы обладают всеми правами функций | Конструкторы обладают всеми правами функций. | ||
< | <syntaxhighlight lang="ocaml" line> | ||
fun listOfWords s = | fun listOfWords s = | ||
map Word (String.tokens Char.isSpace s) | map Word (String.tokens Char.isSpace s) | ||
Строка 25: | Строка 25: | ||
| Tagged (tag, contents) => scat [ "<",tag,">", scat (map toString contents), "</",tag,">" ] | | Tagged (tag, contents) => scat [ "<",tag,">", scat (map toString contents), "</",tag,">" ] | ||
end | end | ||
</ | </syntaxhighlight> | ||
[[Категория:Структуры данных]] | [[Категория:Структуры данных]] |
Версия 12:17, 19 октября 2022
В теории типов и функциональных языках программирования конструктор алгебраического типа данных или просто конструктор представляет собой функцию с пустым телом, конструирующую объект алгебраического типа данных.
Алгебраические типы данных являются важным элементом языков, типизированных по Хиндли — Милнеру.
Пример
Простейшую структуру XML-документа в Standard ML можно определить следующим образом<
datatype simple_xml = Empty
| Word of string
| Tagged of string * simple_xml list
Конструкторы обладают всеми правами функций.
fun listOfWords s =
map Word (String.tokens Char.isSpace s)
fun toString e =
let val scat = String.concat in
case e of
Empty => ""
| Word s => s ^ " "
| Tagged (tag, contents) => scat [ "<",tag,">", scat (map toString contents), "</",tag,">" ]
end