- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
# это комментарий #
COMMENT это понятно что COMMENT
CO это тоже ко-ко-коментарий CO
CO функция принимает 3 параметра типа INT и возвращает ссылку на массив CO
PROC range = (INT start, end, step)REF[]INT : (
INT length = ABS((end - start) % step);
NEW [0 : length - 1]INT result; CO массив в куче CO
CO LWB —– нижний индекс массива, UPB —– верхний CO
FOR i FROM LWB result TO UPB result
DO
result[i] := start + i * step
OD;
result CO функции возвращают результат последнего вычесленного выражения CO
);
CO можно определять свои операторы CO
OP RANGE = (INT start, end)REF[]INT: range(start, end, (start < end | 1 | -1));
PRIO RANGE = 5; CO для бинарных операторов нужно задать приоритет, у сложения/вычитания приоритет = 6 CO
CO для операторов возможна перегрузка по количеству и типу аргументов CO
OP RANGE = (INT end)REF[]INT: 0 RANGE end;
OP ACCUM = ([]INT x, PROC(INT,INT)INT f)INT : (
INT length = UPB x - LWB x;
IF length = 0 THEN
1
ELIF length = 1 THEN
x[LWB x]
ELSE
INT result;
result := x[LWB x];
FOR i FROM LWB x + 1 TO UPB x
DO
result := f(result, x[i])
OD;
result
FI
);
PRIO ACCUM = 5;
CO правый операнд у ACCUM —– лямбда CO
OP ! = (INT x)INT: 1 RANGE x + 1 ACCUM ((INT x, y)INT: x * y);
printf(($g(0), "! = ", g(0), l$, 7, !7));
OP MAP = ([]INT x, PROC(INT)INT f)REF[]INT : (
NEW [LWB x : UPB x]INT result;
FOR i FROM LWB x TO UPB x
DO
result[i] := f(x[i])
OD;
result
);
PRIO MAP = 5;
PROC pow = (INT x, n)INT: x ^ n;
CO каррирование CO
printf(($g(0), " "$, RANGE 10 MAP pow(2, )));
print(new line);
OP FOREACH = (REF[]INT x, PROC(REF INT)VOID f)VOID : (
FOR i FROM LWB x TO UPB x
DO
f(x[i])
OD
);
PRIO FOREACH = 5;
REF[]INT a = -5 RANGE 6;
a FOREACH ((REF INT x)VOID:
x := x ^ 2
);
printf(($g(0), " "$, a))
cmepmop 13.04.2019 23:50 # 0
PACTPOBblu_nemyx 14.04.2019 05:30 # +1
Сам синтаксис –— жуткая смесь «Си» и «Паскаля». Ну они и вышли из «Алгола», только разделились на остроконечников и тупоконечников.
Порадовали операторы, которым программист может назначать приоритет. Даже в крестах такого нет: там готовый набор символов, которые можно переопределять, с заранее заданным приоритетом.
Встроенные операторы для определения границ индекса массива. Эти операторы унаследовали Паскаль (в виде функций High и Low) и язык Ада (в виде атрибутов 'First, 'Last, 'Range, 'Length), но проигнорировал язык Си. В сишке вообще арифметика указателей для бесконечной ленты вместо нормальных массивов, как будто мы собираемся реализовывать машину Тьюринга или интерпретатор Брейнфака.
Динамические массивы в куче с произвольными диапазонами индексов.
Анонимные функции.
Неужели всё это было в 1968-м году?
Про каррирование жду пояснений.
bormand 14.04.2019 07:04 # 0
А в лиспе в это время уже GC был.
guest8 14.04.2019 08:57 # −999
guest8 14.04.2019 09:12 # −999
guest8 14.04.2019 10:56 # −999
guest8 15.04.2019 00:32 # −999
BOKCEJIbHblu_nemyx 14.04.2019 10:57 # +1
> гц весьма списифисиський.
Какой же?
guest8 14.04.2019 11:02 # −999
BOKCEJIbHblu_nemyx 14.04.2019 11:50 # 0
guest8 14.04.2019 13:58 # −999
BOKCEJIbHblu_nemyx 14.04.2019 14:26 # 0
Моя твоя не понимать.
CHayT 14.04.2019 17:39 # +1
Нет. Из более-менее распространённых лишпов иммутабельность поставлена во главу стола только в Racket.
BOKCEJIbHblu_nemyx 14.04.2019 10:51 # +1
PACTPOBblu_nemyx 14.04.2019 17:29 # 0
этом примере pow(2,)) и всё? Так коротко?
guest8 14.04.2019 18:09 # −999
PACTPOBblu_nemyx 14.04.2019 18:34 # 0
BOKCEJIbHblu_nemyx 14.04.2019 19:15 # 0
PACTPOBblu_nemyx 14.04.2019 20:02 # 0
https://ideone.com/QO1oCh
guest8 14.04.2019 20:07 # −999
PACTPOBblu_nemyx 14.04.2019 20:16 # 0
Если я правильно понял, то std::bind позволяет передавать аргументы в любом порядке. Т. е. можно сделать std::bind(f, _3, _2, _1), чтобы аргументы подставились задом наперёд?
BOKCEJIbHblu_nemyx 15.04.2019 17:02 # 0
Чёрт, 'J' меня испортил, я сперва подумал, что это отрицательные числа.
PACTPOBblu_nemyx 14.04.2019 20:38 # 0
https://ideone.com/XN0Y4Y
PACTPOBblu_nemyx 14.04.2019 21:11 # 0
groser 15.04.2019 00:06 # 0
https://ideone.com/WiUFJi
gost 15.04.2019 00:19 # 0
BOKCEJIbHblu_nemyx 14.04.2019 19:14 # 0
guest8 15.04.2019 00:24 # −999
BOKCEJIbHblu_nemyx 14.04.2019 10:58 # 0
guest8 14.04.2019 11:02 # −999
guest8 14.04.2019 11:43 # −999
guest8 15.04.2019 00:23 # −999
A3APTHblu_nemyx 16.04.2019 23:37 # 0
BOKCEJIbHblu_nemyx 17.04.2019 00:35 # 0
BoeHHblu_nemyx 17.04.2019 00:38 # 0
PACTPOBblu_nemyx 17.04.2019 00:51 # 0
https://tinyurl.com/y9ghbkkm