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

Sergey ShishkinSergey Shishkin
2 min read

Фактически, снова о контекстах … И, пожалуй один из нетривиальных аспектов … AT-метка @ встречается повсюду в исходном коде PicoLisp, и иногда неочевидно, что означает @ в рассматриваемом контексте … резюме для быстрого обзора, которое помогает выяснить контекст и значение загадочного знака @.

  1.  (de foo @ ...)
    

    CAR - лямбда-выражение (Evaluation > "when the CAR is the symbol @"). Все аргументы вычисляются и хранятся внутри в списке. Когда исполняемая функция определяется в самом Lisp, мы называем ее лямбда-выражением . Лямбда-выражение всегда имеет список исполняемых выражений в качестве своего CDR. Однако CAR должен быть либо списком символов, либо одним символом, и он управляет оценкой аргументов исполняемой функции в соответствии с разными правилами, в частности, когда CAR - @. Тело лямбда-выражения выполняется, и к оцененным аргументам можно обращаться последовательно с помощью функций args, next. arg и rest. Это позволяет определять функции с переменным числом оцененных аргументов.

  2.  (- @ @@ @@@)
    

    read-eval-loops (@ Result > load). Результат последних (3) вычислений сохраняется в VAL символа. См. @ Result.

  3.  (while (read)
         (println @))
    
     (and
         @
         (min @ 5)
         (prinl @)
         (gt0 (dec @)) )
    

    Flow- и logic функции с условными выражениями (@ Result > Flow functions). Сохраняет результат (последнего) условного выражения.

  4.  (case @ ("^M" NIL)
         ("^J" "^M")
         (T @))
    

    Flow- и logic функции потока управлния. Сохраняет результат управляющего выражение

  5.  (match '(@A Zeit) '(Keine))
    

    'match' и 'fill' (Function reference > match). Паттерн wildcard.

  6.  (text "abc @1 def @2" 'XYZ 123)
    

    'text' (Function reference > text). Заменяет все вхождения знака at "@", за которым следует одна из букв "1" - "9" и "A" - "Z", на соответствующий аргумент any.

  7.  (load "@lib/misc.l")
    

    Path names (Invocation). Подстановка домашнего каталога.

  8.  (be likes (John @X))
    

    Pilog, variable (Pilog). Переменная Pilog.

  9.  (be likes (John @))
    

    Анонимная переменная Pilog.

  10. (native "@" "getenv" 'S "TERM")
    

    Shared object libraries (Function reference > native). Только для 64-битной версии. Вызывает собственную функцию C. Первый аргумент должен указывать общую библиотеку объектов, например, "@", здесь это временный символ, обозначающий текущую основную программу.

http://www.picolisp.com/wiki/?AtMark

Описание самой функции (символа)

@ - содержит результат последнего выражения верхнего уровня в текущем цикле чтения-вычисления-печати или результат условного выражения во время оценки функций потока … используется как формальный параметр в лямбда-выражениях , обозначает переменное число оцененных аргументов.

@@ - содержит результат предпоследнего выражения верхнего уровня в текущем цикле чтения-вычисления-печати. Некоторые функции сохраняют вторичное возвращаемое значение.

@@@ - содержит результат третьего с конца выражения верхнего уровня в текущем цикле чтения-вычисления-печати.

0
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

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