inc и dec

После необходимой и скучной отладки, второй неинтересный аспект - арифметика. Да, конечно, это базис, без которого невозможно представить себе вычисления, но поэтому и тривиально. Особенно раздражает, когда авторы, описывающие свою систему, начинают рассказывать как их система складывает числа, при этом, как будто, это делает не процессор, в определенные регистры которого мы эти числа посылаем, а потом в предписанном регистре забираем ответ. Но вместо того, чтобы привести список всех арифметических операций системы, парочка лексических акцентов - инкремент (увеличение) и дескремент (уменьшение).
inc - первая форма возвращает значение num, увеличенное на 1
. Вторая форма увеличивает VAL var
на 1
или на num. Если первый аргумент равен NIL
, он возвращается немедленно. (inc Num)
эквивалентно (+ Num 1), а (inc 'Var)
эквивалентно (set 'Var (+ Var 1))
.
(inc 'num) -> num
(inc 'var ['num]) -> num
: (inc 7)
-> 8
: (inc -1)
-> 0
: (zero N)
-> 0
: (inc 'N)
-> 1
: (inc 'N 7)
-> 8
: N
-> 8
: (setq L (1 2 3 4))
-> (1 2 3 4)
: (inc (cdr L))
-> 3
: L
-> (1 3 3 4)
inc! - функция-обертка транзакции для inc. num
по умолчанию равна 1
. Обратите внимание, что для увеличения значения свойства сущности обычно используется сообщение inc!>
.
(inc! 'obj 'sym ['num]) -> num
(inc! Obj 'cnt 0) # Incrementing a property of a non-entity object
https://picolisp.tiddlyhost.com/#inc
dec - первая форма возвращает значение num
, уменьшенное на 1
. Вторая форма уменьшает VAL var
на 1 или на num
. Если первый аргумент равен NIL
, он возвращается немедленно. (dec Num)
эквивалентно (- Num 1), а (dec 'Var)
эквивалентно (set 'Var (- Var 1))
.
(dec 'num) -> num
(dec 'var ['num]) -> num
: (dec -1)
-> -2
: (dec 7)
-> 6
: (setq N 7)
-> 7
: (dec 'N)
-> 6
: (dec 'N 3)
-> 3
Subscribe to my newsletter
Read articles from Sergey Shishkin directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Sergey Shishkin
Sergey Shishkin
Всегда чему-то учусь!