Модельный язык программирования — исследование типизации: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Juliet (обсуждение | вклад) |
Juliet (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
''Модельный язык программирования с шаблонами, на примере которого изучается алгоритм типизации Хиндли-Милнера (Белякова Ю.).'' | ''Модельный язык программирования с шаблонами, на примере которого изучается алгоритм типизации Хиндли-Милнера (Белякова Ю.).'' | ||
Язык нужен для исследования алгоритма типизации | Язык нужен для исследования алгоритма типизации. <br /> | ||
Основная задача — '''проверка и вывод типов'''. | Основная задача — '''проверка и вывод типов'''. | ||
= Синтаксис = | = Синтаксис = | ||
Строка 45: | Строка 41: | ||
'''while''' <условие> '''do''' | '''while''' <условие> '''do''' | ||
ops; | ops; | ||
''' | '''endw''' | ||
== Функции == | == Функции == | ||
Строка 52: | Строка 48: | ||
... | ... | ||
return 5; | return 5; | ||
''' | '''end''' | ||
Nat foo(Nat x) '''def''' // функция с параметрами | Nat foo(Nat x) '''def''' // функция с параметрами | ||
... | ... | ||
return x + 7; | return x + 7; | ||
''' | '''end''' | ||
void foo( | void foo(<параметры>) '''def''' // процедура | ||
... | ... | ||
return; | return; | ||
''' | '''end''' | ||
foo(<параметры>) '''def''' // автовыведение типа возвращаемого значения | |||
... | ... | ||
return true; | return true; | ||
''' | '''end''' | ||
Определение шаблона функции: | Определение шаблона функции: | ||
T foo | T foo[!T, S](S->T f, S xx) '''def''' | ||
... | ... | ||
''' | '''end''' | ||
Вызов функции: | Вызов функции: | ||
foo(x, y, ...); | foo(x, y, ...); | ||
== | = Типы = | ||
== Базовые типы == | |||
= Базовые типы = | |||
* Nat | * Nat | ||
* Bool | * Bool | ||
* Int | * Int | ||
* Double | * Double | ||
* String | |||
== Функциональные типы == | |||
T->S | |||
T->S->U ~ T->(S->U) | |||
(T->S)->U | |||
= Процедуры и функции = | |||
Основная функция — '''<big>typeof</big>'''. | |||
'''typeof'''(<выражение>); | |||
Выражением может быть имя функции, арифметическое или логическое выражение, применение, etc. | |||
Вероятно, добавим вывод: | |||
print() |
Версия от 20:29, 27 марта 2011
Модельный язык программирования с шаблонами, на примере которого изучается алгоритм типизации Хиндли-Милнера (Белякова Ю.).
Язык нужен для исследования алгоритма типизации.
Основная задача — проверка и вывод типов.
Синтаксис
Присваивание
Nat x = 5; var x = 7.9; // автовыведение типа переменной y = x;
Выражения
expr (expr)
Арифметические:
a + b a - b a * b a / b a div b a mod b
Логические:
a || b a && b !a a == b a < (>) b a <= (>=) b
Условный оператор
if <условие> then ops1 {elif <условиеi> then opsi} [else ops2] fi
Цикл
Цикл с предусловием.
while <условие> do ops; endw
Функции
Определение функции:
Nat foo() def // функция без параметров ... return 5; end Nat foo(Nat x) def // функция с параметрами ... return x + 7; end void foo(<параметры>) def // процедура ... return; end foo(<параметры>) def // автовыведение типа возвращаемого значения ... return true; end
Определение шаблона функции:
T foo[!T, S](S->T f, S xx) def ... end
Вызов функции:
foo(x, y, ...);
Типы
Базовые типы
- Nat
- Bool
- Int
- Double
- String
Функциональные типы
T->S T->S->U ~ T->(S->U) (T->S)->U
Процедуры и функции
Основная функция — typeof.
typeof(<выражение>);
Выражением может быть имя функции, арифметическое или логическое выражение, применение, etc.
Вероятно, добавим вывод:
print()