Модельный язык программирования Polly — описание: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Juliet (обсуждение | вклад) (Новая: = Синтаксис = == Присваивание == Nat x = 5; '''var''' x = 7.9; // автовыведение типа переменной y = x; == Выражения ==...) |
Juliet (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
= Синтаксис = | == Синтаксис == | ||
== Присваивание == | === Присваивание === | ||
Nat x = 5; | Nat x = 5; | ||
'''var''' x = 7.9; // автовыведение типа переменной | '''var''' x = 7.9; // автовыведение типа переменной | ||
y = x; | y = x; | ||
== Выражения == | === Выражения === | ||
expr | expr | ||
(expr) | (expr) | ||
Строка 23: | Строка 23: | ||
a <= (>=) b | a <= (>=) b | ||
== Условный оператор == | === Условный оператор === | ||
'''if''' <условие> '''then''' | '''if''' <условие> '''then''' | ||
ops<sub>1</sub> | ops<sub>1</sub> | ||
Строка 32: | Строка 32: | ||
'''fi''' | '''fi''' | ||
== Цикл == | === Цикл === | ||
Цикл с ''предусловием''. | Цикл с ''предусловием''. | ||
'''while''' <условие> '''do''' | '''while''' <условие> '''do''' | ||
Строка 38: | Строка 38: | ||
'''endw''' | '''endw''' | ||
== Функции == | === Функции === | ||
Определение функции: | Определение функции: | ||
Nat '''fun''' foo() // функция без параметров | Nat '''fun''' foo() // функция без параметров | ||
Строка 68: | Строка 68: | ||
foo(x, y, ...); | foo(x, y, ...); | ||
= Типы = | == Типы == | ||
== Базовые типы == | === Базовые типы === | ||
* Bool | * Bool | ||
* Int | * Int | ||
Строка 75: | Строка 75: | ||
* String | * String | ||
== Функциональные типы == | === Функциональные типы === | ||
T->S | T->S | ||
T->S->U ~ T->(S->U) | T->S->U ~ T->(S->U) | ||
(T->S)->U | (T->S)->U | ||
= Процедуры и функции = | == Процедуры и функции == | ||
Основная функция — '''<big>typeof</big>'''. | Основная функция — '''<big>typeof</big>'''. | ||
'''typeof'''(<выражение>); | '''typeof'''(<выражение>); | ||
Строка 88: | Строка 88: | ||
print() | print() | ||
= Лямбда-выражения = | == Лямбда-выражения == | ||
Простое лямбда-выражение от одного параметра: | Простое лямбда-выражение от одного параметра: | ||
{ Nat x => x*x } | { Nat x => x*x } |
Текущая версия от 14:48, 24 апреля 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 fun foo() // функция без параметров ... return 5; end Nat fun foo(Nat x) // функция с параметрами ... return x + 7; end void fun foo(<параметры>) // процедура ... return; end fun foo(<параметры>) // автовыведение типа возвращаемого значения ... return true; end
Определение шаблона функции:
T fun foo[!T, S](S->T f, S xx) ... end
Вызов функции:
foo(x, y, ...);
Типы
Базовые типы
- Bool
- Int
- Double
- String
Функциональные типы
T->S T->S->U ~ T->(S->U) (T->S)->U
Процедуры и функции
Основная функция — typeof.
typeof(<выражение>);
Выражением может быть имя функции, арифметическое или логическое выражение, применение, etc.
Вероятно, добавим вывод:
print()
Лямбда-выражения
Простое лямбда-выражение от одного параметра:
{ Nat x => x*x }
Простое лямбда-выражение от двух параметров:
{ (Nat x, Nat y) => x + y }
Сложное лямбда-выражение от двух параметров (???):
{ (Nat x, Nat y) => var z = x + y; return ((x + y) mod 2 = 0) ? x*x : y*y; } var lambda = { Nat x => var y = x*x*x; var z = f(y); return z + x; }