Модельный язык программирования — исследование типизации: различия между версиями

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Нет описания правки
Строка 1: Строка 1:
''Модельный язык программирования с шаблонами, на примере которого изучается алгоритм типизации Хиндли-Милнера (Белякова Ю.).''
''Модельный язык программирования с шаблонами, на примере которого изучается алгоритм типизации Хиндли-Милнера (Белякова Ю.).''


Язык нужен для исследования алгоритма типизации, поэтому операторы не будут исполняться. <br />
Язык нужен для исследования алгоритма типизации. <br />
Основная задача — '''проверка и вывод типов'''.
Основная задача — '''проверка и вывод типов'''.
Единственный исполняемый оператор — '''<big>print_type</big>'''.
'''print_type''' <выражение>;
Выражением может быть имя функции, арифметическое или логическое выражение, применение, etc.


= Синтаксис =
= Синтаксис =
Строка 45: Строка 41:
  '''while''' <условие> '''do'''
  '''while''' <условие> '''do'''
     ops;
     ops;
  '''done'''
  '''endw'''


== Функции ==
== Функции ==
Строка 52: Строка 48:
     ...
     ...
     return 5;
     return 5;
  '''fed'''
  '''end'''
   
   
  Nat foo(Nat x) '''def'''    // функция с параметрами
  Nat foo(Nat x) '''def'''    // функция с параметрами
     ...
     ...
     return x + 7;
     return x + 7;
  '''fed'''
  '''end'''
   
   
  void foo(...) '''def'''      // процедура
  void foo(<параметры>) '''def'''      // процедура
     ...
     ...
     return;
     return;
  '''fed'''
  '''end'''
   
   
  '''''t_inf''''' foo(...) '''def'''     // автовыведение типа возвращаемого значения
  foo(<параметры>) '''def'''   // автовыведение типа возвращаемого значения
     ...
     ...
     return true;
     return true;
  '''fed'''
  '''end'''


Определение шаблона функции:
Определение шаблона функции:
  T foo<T, S>(S->T f, S xx) '''def'''
  T foo[!T, S](S->T f, S xx) '''def'''
     ...
     ...
  '''fed'''
  '''end'''


Вызов функции:
Вызов функции:
  foo(x, y, ...);
  foo(x, y, ...);


== Методы ==
= Типы =
x.p();
== Базовые типы ==
 
= Базовые типы =
* 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()