Groups | Search | Server Info | Login | Register
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 | Find similar
Connecting stream filters in CL luxhalitus <luxhalitus@null.invalid> - 2025-11-05 10:18 +0000
csiph-web