Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.lisp > #60737
| From | luxhalitus <luxhalitus@null.invalid> |
|---|---|
| Newsgroups | comp.lang.lisp |
| Subject | Connecting stream filters in CL |
| Date | 2025-11-05 10:18 +0000 |
| Organization | A noiseless patient Spider |
| Message-ID | <8qgkeq9n.fsf@null.invalid> (permalink) |
I'm currently prototyping a system of multiple interconnected string filters and am wondering what the best practices are regarding the Common Lisp streams API. If i had a filter function like: | (defun number-lines (in out) | (handler-case | (loop with line = "" | and number = 1 | do (setf line (read-line in)) | (format out "~D: ~A" number line) | (incf number)) | (end-of-file (e)))) how would i go about chaining two calls together? A macro that takes advantage of the string stream types immediately comes to mind: | (defmacro pipe ((writing &body in) (reading &body out)) | `(let ((,reading | (make-string-input-stream | (let ((,writing (make-string-output-stream))) | ,@in | (get-output-stream-string ,writing))))) | ,@out)) You could also write wrappers around C pipe(2) or mkfifo. None of these seem like such a good fit for Common Lisp streams though, considering their implementation should already come with some kind of buffering built in. Allegro CL exposes a make-pipe-streams and a make-function-input-stream function, but no such luck in SBCL it seems. Any quicklisp packages featuring this exact functionality or alternatives i'm missing? -- ,`> ( ( `.>
Back to comp.lang.lisp | Previous | Next — Next in thread | Find similar | Unroll thread
Connecting stream filters in CL luxhalitus <luxhalitus@null.invalid> - 2025-11-05 10:18 +0000 Re: Connecting stream filters in CL steve g <sgonedes1977@gmail.com> - 2026-06-08 12:33 -0400 Re: Connecting stream filters in CL steve g <Sgonedes1977@gmail.com> - 2026-06-22 15:50 -0400
csiph-web