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

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Строка 30: Строка 30:
     ops<sub>2</sub>]
     ops<sub>2</sub>]
  '''fi'''
  '''fi'''
== Цикл ==
Цикл с ''предусловием''.
'''while''' <условие> '''do'''
    ops;
'''done'''
== Функции ==
Определение функции:
Nat foo() '''def'''          // функция без параметров
    ...
    return 5;
'''fed'''
Nat foo(Nat x) '''def'''    // функция с параметрами
    ...
    return x + 7;
'''fed'''
void foo(...) '''def'''      // процедура
    ...
    return;
'''fed'''
'''''t_inf''''' foo(...) '''def'''
    ...
    return true;
'''fed'''
Определение шаблона функции:
T foo<T, S>(S->T f, S xx) '''def'''
    ...
'''fed'''
Вызов функции:
foo(x, y, ...);
== Методы ==
x.p();
= Базовые типы =
* Nat
* Bool
* Int
* Double

Версия от 08:38, 23 марта 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

Условный оператор

if <условие> then
    ops1
{elif <условиеi> then
    opsi}
[else
    ops2]
fi

Цикл

Цикл с предусловием.

while <условие> do
    ops;
done

Функции

Определение функции:

Nat foo() def          // функция без параметров
    ...
    return 5;
fed

Nat foo(Nat x) def     // функция с параметрами
    ...
    return x + 7;
fed

void foo(...) def      // процедура
    ...
    return;
fed

t_inf foo(...) def
    ...
    return true;
fed

Определение шаблона функции:

T foo<T, S>(S->T f, S xx) def
    ...
fed

Вызов функции:

foo(x, y, ...);

Методы

x.p();

Базовые типы

  • Nat
  • Bool
  • Int
  • Double