Standart ML. Урок 6. Списки

Standart ML   24 октября 2013  Автор статьи:  
Список это…

Списки — конечные последовательности значений определенного типа.
Тип A list состоит из конечных последовательностей (списков) значений типа А.
Например, тип real list — список действительных чисел; тип bool list список логических значений.

Способы записи списков

Существует два способа записи списков:

  • основной;
  • сокращенный.

Список значений типа А либо пуст (nil), либо представляет из себя значение типа А, за которым следует список значений типа А (e :: l), где e — выражение типа А, а l — выражение типа А list.

Операция :: называется cons (конс).

Основной способ записи списка из n элементов:
e1 :: e2 :: ··· :: en :: nil.

list

Сокращенный способ записи списка из n элементов:
[e1, e2, …, en].

list2

Список списков так же существует:

listlist

Тип списка nil

Пустой список:


- nil;
> val 'a it = [] : 'a list

listNil

Как мы видим, тип списка nil включает переменную типа ’a («альфа»). Это происходит из-за недостатка информации о типе элементов списка. Константе nil приписывается тип ’a list, где ’а — переменная, пробегающая множество типов.

Частные случаи списков
  • Полиморфный тип (политип) содержит переменную типа и получается путем замены всех вхождений данной переменной типа на какой-либо тип (один и тот же). Тип, подставляемый вместо переменной так же может быть полиморфным.
  • Пример: типы int list и (real * ’b) list являются частными случаями политипа ’a list.

  • Мономорфный тип (монотип) не содержит переменных типа.
Равенство списков

Равенство для списков определяется поэлементно.
[important]Правило: два списка равны, если они состоят из одного и того же числа элементов и соответствующие элементы между собой равны.
[/important]

ravSpis

Помните про типы! Соответствующие элементы списков должны иметь одинаковые типы, иначе будет выдана ошибка согласования типов:

erSp

В следующем уроке мы познакомимся с записями — еще одним составным типом в Standart ML!

Научиться программировать

  • на Delphi

  • на Java

  • на C++