[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#22961: The read function does not support a lambda argument
From: |
John Mastro |
Subject: |
bug#22961: The read function does not support a lambda argument |
Date: |
Wed, 9 Mar 2016 10:27:28 -0800 |
Mihai Călin Bazon <mihai.bazon@gmail.com> wrote:
> Example, I eval this in the scratch buffer (with lexical-binding set true):
>
> (read (let ((str "TEST")
> (pos 0)
> (prev nil))
> (lambda (ch)
> (cond
> (ch (push ch prev))
> (prev (pop prev))
> ((< pos (length str))
> (prog1 (aref str pos)
> (setq pos (1+ pos))))))))
>
> According to the docs [1] an input stream can be a function. I would expect
> the above to return the symbol TEST, but instead I get an error ("end of
> file during parsing").
Confirmed on Emacs 25. However, it does work with a named defun:
(let ((str "TEST")
(pos 0)
(prev nil))
(defun my-read-function (&optional ch)
(cond (ch (push ch prev))
(prev (pop prev))
((< pos (length str))
(prog1 (elt str pos)
(setq pos (1+ pos)))))))
(read #'my-read-function) ;=> TEST
(Mihai, the ‘ch’ argument should be ‘&optional’, though that's not
related to the error in question).
--
john