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

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
(Новая: = Синтаксис = == Присваивание == Nat x = 5; '''var''' x = 7.9; // автовыведение типа переменной y = x; == Выражения ==...)
 
Нет описания правки
 
Строка 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; }