path , patch ... pat?
Всегда чему-то учусь!
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