Inferno Programmer's Guide / Руководство программиста по ОС Inferno: Chapter 5 - The Limbo Language Definition

← →
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Определение модуля

rapidfx 10.10.09 в 08:20

0

Обозначается в виде:
элемент -> элемент
означает принадлежность модулю. Первый элемент определяет модуль: это может быть и имя типа модуль или выражение типа модуль. Второй элемент является именем константы, типом, объектом данных или функцией указанной в объявлении модуля. В любом случае, будь то имя типа модуль или объект типа модуль, этого достаточно для определения констант или типов; функции и объекты непосредственно экспортируемые модулем и содержащие в себе adt должны быть уточнены объектом типа модуль, инициализированные оператором load.

rapidfx 10.10.09 в 08:31

0

Пример использующий урезанную версию вышесказанного:

rapidfx 10.10.09 в 08:31

0

Linear : module {
setflags : fn (flag : int); TRUNCATE : con 1; vector : adt {
v : array of real;
add : fn (vl : self vector, v2: vector) : vector;
make : fn(v : array of real) : vector;
}; };
one might say:
Tin := load Linear "/dis/linear.dis"; a : array of real;
vl : Tin -> vector;
v2 : Linear -> vector;
1i n->setf1ags (Li near->TRUNCATE);
vl = 1in->(Linear->vector).make(a);
vl = 1in->vl.make(a);
vl = 1in->vl.add(vl);
vl.v = nil;

rapidfx 10.10.09 в 08:31

0

Здесь, объявления vl и v2 одинаковы; оба имени типа модуль ( Linear) или хэндл (Tin) достаточны для идентификации модуля. В вызове setflags, необходим хэндл для для обращения самому себе; имя типа достаточно для константы.

rapidfx 10.10.09 в 08:37

0

vl = 1in->(Linear->vector) .tnake(a) ;

rapidfx 10.10.09 в 08:32

0

vl = 1in->vl.make(a);

rapidfx 10.10.09 в 08:32

0

vl = 1in->vector.make(a);#wrong
vl = 1in->Linear->vector.make(a);#wrong

rapidfx 10.10.09 в 08:37

0

Tin := load Linear "/dis/linear.dis"; vector, TRUNCATE, setflags : import Tin; a : array of real;
vl : vector; v2 : vector; set-flags (TRUNCATE); vl = vector.make(a); vl = vl.make(a); vl = vl.add(vl); vl.v = nil;

rapidfx 10.10.09 в 08:37

0

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

rapidfx 10.10.09 в 08:38

0

Слайс

rapidfx 12.09.09 в 15:59

0

Вычленение подстроки происходит следующим образом:
term [.expression : expression]

rapidfx 12.09.09 в 16:00

0

Инкремент и декремент

rapidfx 10.10.09 в 08:38

0

Монадические выражения

rapidfx 10.10.09 в 08:39

0

Монадические операторы сложения

rapidfx 10.10.09 в 08:40

0

Логическое инвертирование/отрицание

rapidfx 10.10.09 в 08:39

0

Оператор дополнения

rapidfx 10.10.09 в 08:41

0

Point: adt {... } ;
p : Point;
pp : ref Point;
p = Point(l, 2);
pp = ref p; # Присваивает те же значения *pp что и у p
p = Point(3, 4);# Изменяет *pp от p
*pp= Point(4, 5);# Не влияет на p

rapidfx 10.10.09 в 08:42

0

Head и tail / Получение головы и хвоста списка

rapidfx 10.10.09 в 08:40

0
Минутку...

← Предыдущая страница

Следующая страница →