out ... in

Сначала хотел выделить только символы с лексемой out, но глядя на output решил объединить с input.
out - открывает any
как выходной канал во время выполнения prg
. Текущий выходной канал будет сохранен и восстановлен соответствующим образом. Если аргумент равен NIL
, используется стандартный вывод. Если аргумент является символом, он используется как имя файла (открывается в режиме чтения/записи-добавления, если первый символ - "+
"). Если это положительное число, оно используется как дескриптор открытого файла. Если это отрицательное число, используется сохраненный выходной канал на столько же уровней выше текущего. В противном случае (если это список), он воспринимается как команда с аргументами, и открывается канал для вывода. Код статуса завершения (зависящий от системы) дочернего процесса сохраняется в глобальной переменной @@. Во всех случаях при завершении prg
вызывается flush.
(out 'any . prg) -> any
: (out "a" (println 123 '(a b c) 'def)) # Write one line to file "a"
-> def
: (out '(lpr) (prinl "Hello")) # Send line to line printer
-> "Hello"
output - устанавливает выходной поток, перенаправляя текущий выходной канал во время выполнения prg
. Текущий выходной канал будет сохранен и восстановлен соответствующим образом. exe
выполняется (в контексте исходного выходного канала) всякий раз, когда требуется вывести символ с помощью вызовов print в prg
. Этот символ передается в глобальной переменной @@, а следующий символ в потоке — в @@@ (просмотр вперед на один символ).
(output exe . prg) -> any
: (output (prin (uppc @@)) (prinl "abc"))
ABC
-> "abc"
: (output (println @@ @@@) (prin "abc"))
"a" "b"
"b" "c"
"c" NIL
-> "abc"
: (pack
(make
(output (link @@)
(print '(+ 2 (* 3 4))) ) ) )
-> "(+ 2 (* 3 4))"
: (pack
(make
(let L (1 2 3 4 5 6 7)
(output (link @@)
(while L
(ext:Base64 (++ L) (++ L) (++ L)) ) ) ) ) )
-> "AQIDBAUGBw=="
timeout - устанавливает или обновляет значение тайм-аута в глобальном *Run, так что текущий процесс выполняет bye после указанного периода. Если вызывается без аргументов, тайм-аут удаляется. Использует -1
как неявный ключ.
: (timeout 3600000) # Timeout after one hour
-> (-1 3600000 (bye))
: *Run # Look after a few seconds
-> ((-1 3574516 (bye)))
https://picolisp.tiddlyhost.com/#out
in - открывает any
входной канал во время выполнения prg
. Текущий входной канал будет сохранен и восстановлен соответствующим образом. Если аргумент равен NIL
, используется стандартный ввод. Если аргумент является символом, он используется как имя файла (открывается в режиме только для чтения). Если это положительное число, он используется как дескриптор открытого файла. Если это отрицательное число, используется сохраненный входной канал на столько же уровней выше текущего. В противном случае (если это список), он воспринимается как команда с аргументами, и открывается канал для ввода. Код статуса завершения (зависит от системы) дочернего процесса сохраняется в глобальной переменной @@.
(in 'any . prg) -> any
: (in "a" (list (read) (read) (read))) # Read three items from file "a"
-> (123 (a b c) def)
: (in '(file "-b" "--mime" "bin/picolisp") # Get the mime type
(line T) )
-> "application/x-executable; charset=binary"
input - устанавливает входной поток, перенаправляя текущий входной канал во время выполнения prg
. Текущий входной канал будет сохранен и восстановлен соответствующим образом. exe
выполняется (в контексте исходного входного канала) всякий раз, когда требуется символ для вызовов чтения в prg
, и должен возвращать один символ при каждом выполнении.
: (input "A" (char))
-> "A"
: (let L (chop "(+ 2 (* 3 4))")
(input (++ L) (read)) )
-> (+ 2 (* 3 4))
: (let L (chop "AQIDBAUGBw==")
(input (++ L)
(while (ext:Base64)
(printsp @) ) ) )
1 2 3 4 5 6 7 -> 7
insert - вставляет any
в lst
а позицию cnt
. Это не деструктивная операция
(insert 'cnt 'lst 'any) -> lst
: (insert 3 '(a b c d e) 777)
-> (a b 777 c d e)
: (insert 1 '(a b c d e) 777)
-> (777 a b c d e)
: (insert 9 '(a b c d e) 777)
-> (a b c d e 777)
intern - создает или находит внутренний символ. Если символ с именем any
уже интернирован, он возвращается. В противном случае any интернируется в текущее пространство имен и возвращается. Если nsp
не является NIL
, any
всегда интернируется в текущее пространство имен (если nsp
— это T
) или в заданное пространство имен, даже если он найден в других пространствах имен.
(intern 'any ['nsp]) -> sym
: (intern "abc")
-> abc
: (intern 'car)
-> car
: ((intern "car") (1 2 3))
-> 1
: ((intern '("c" "a" "r")) (1 2 3))
-> 1
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
Всегда чему-то учусь!