path , patch ... pat?

Sergey ShishkinSergey Shishkin
1 min read

path - заменяет любой начальный символ "@" или "~" в аргументе any на PicoLisp или домашний каталог пользователя соответственно, как они были запомнены во время запуска интерпретатора. При желании, имени может предшествовать символ "+" (как используется in и out). Этот механизм используется внутри всеми функциями ввода-вывода.

$ /usr/bin/picolisp /usr/lib/picolisp/lib.l
: (path "a/b/c")
-> "a/b/c"
: (path "@a/b/c")
-> "/usr/lib/picolisp/a/b/c"
: (path "+@a/b/c")
-> "+/usr/lib/picolisp/a/b/c"

patch - деструктивно заменяет все подвыражения lst, которые соответствуют шаблону any, на результат выполнения prg.

: (pp 'hello)
(de hello NIL
   (prinl "Hello world!") )
-> hello

: (patch hello 'prinl 'println)
-> NIL
: (pp 'hello)
(de hello NIL
   (println "Hello world!") )
-> hello

: (patch hello '(prinl @S) (fill '(println "We said: " . @S)))
-> NIL
: (hello)
We said: Hello world!
-> "Hello world!"

pat? - возвращает any, когда аргумент any является символом, имя которого начинается с символа "@", в противном случае NIL.

(pat? 'any) -> pat | NIL

https://picolisp.tiddlyhost.com/#pat%3F

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

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