Разное использование @

Фактически, снова о контекстах … И, пожалуй один из нетривиальных аспектов … AT-метка @
встречается повсюду в исходном коде PicoLisp, и иногда неочевидно, что означает @
в рассматриваемом контексте … резюме для быстрого обзора, которое помогает выяснить контекст и значение загадочного знака @
.
(de foo @ ...)
CAR - лямбда-выражение (Evaluation > "when the CAR is the symbol @"). Все аргументы вычисляются и хранятся внутри в списке. Когда исполняемая функция определяется в самом Lisp, мы называем ее лямбда-выражением . Лямбда-выражение всегда имеет список исполняемых выражений в качестве своего CDR. Однако CAR должен быть либо списком символов, либо одним символом, и он управляет оценкой аргументов исполняемой функции в соответствии с разными правилами, в частности, когда CAR -
@
. Тело лямбда-выражения выполняется, и к оцененным аргументам можно обращаться последовательно с помощью функций args, next. arg и rest. Это позволяет определять функции с переменным числом оцененных аргументов.(- @ @@ @@@)
read-eval-loops (@ Result > load). Результат последних (3) вычислений сохраняется в VAL символа. См. @ Result.
(while (read) (println @)) (and @ (min @ 5) (prinl @) (gt0 (dec @)) )
Flow- и logic функции с условными выражениями (@ Result > Flow functions). Сохраняет результат (последнего) условного выражения.
(case @ ("^M" NIL) ("^J" "^M") (T @))
Flow- и logic функции потока управлния. Сохраняет результат управляющего выражение
(match '(@A Zeit) '(Keine))
'match' и 'fill' (Function reference > match). Паттерн wildcard.
(text "abc @1 def @2" 'XYZ 123)
'text' (Function reference > text). Заменяет все вхождения знака at "@", за которым следует одна из букв "1" - "9" и "A" - "Z", на соответствующий аргумент
any
.(load "@lib/misc.l")
Path names (Invocation). Подстановка домашнего каталога.
(be likes (John @X))
(be likes (John @))
Анонимная переменная Pilog.
(native "@" "getenv" 'S "TERM")
Shared object libraries (Function reference > native). Только для 64-битной версии. Вызывает собственную функцию C. Первый аргумент должен указывать общую библиотеку объектов, например, "@", здесь это временный символ, обозначающий текущую основную программу.
http://www.picolisp.com/wiki/?AtMark
Описание самой функции (символа)
@
- содержит результат последнего выражения верхнего уровня в текущем цикле чтения-вычисления-печати или результат условного выражения во время оценки функций потока … используется как формальный параметр в лямбда-выражениях , обозначает переменное число оцененных аргументов.
@@
- содержит результат предпоследнего выражения верхнего уровня в текущем цикле чтения-вычисления-печати. Некоторые функции сохраняют вторичное возвращаемое значение.
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
Всегда чему-то учусь!