* general lazy list facility for Emacs Lisp? @ 2011-03-23 15:07 Ted Zlatanov 2011-03-23 16:45 ` Tassilo Horn 0 siblings, 1 reply; 23+ messages in thread From: Ted Zlatanov @ 2011-03-23 15:07 UTC (permalink / raw) To: emacs-devel Is there a package for general lazy list management in Emacs Lisp? I couldn't find one. Thanks Ted ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 15:07 general lazy list facility for Emacs Lisp? Ted Zlatanov @ 2011-03-23 16:45 ` Tassilo Horn 2011-03-23 17:12 ` Ted Zlatanov 2011-03-23 17:13 ` Drew Adams 0 siblings, 2 replies; 23+ messages in thread From: Tassilo Horn @ 2011-03-23 16:45 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel Ted Zlatanov <tzz@lifelogs.com> writes: > Is there a package for general lazy list management in Emacs Lisp? What's a lazy list? Something like a LazySeq in Clojure, that is, a possibly infinite sequence of things that are only calculated when actually consumed ("realized")? If that's what you mean, I think the answer is no. Bye, Tassilo ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 16:45 ` Tassilo Horn @ 2011-03-23 17:12 ` Ted Zlatanov 2011-03-23 17:46 ` Thierry Volpiatto 2011-03-23 19:03 ` Tassilo Horn 2011-03-23 17:13 ` Drew Adams 1 sibling, 2 replies; 23+ messages in thread From: Ted Zlatanov @ 2011-03-23 17:12 UTC (permalink / raw) To: emacs-devel On Wed, 23 Mar 2011 17:45:35 +0100 Tassilo Horn <tassilo@member.fsf.org> wrote: TH> Ted Zlatanov <tzz@lifelogs.com> writes: >> Is there a package for general lazy list management in Emacs Lisp? TH> What's a lazy list? Something like a LazySeq in Clojure, that is, a TH> possibly infinite sequence of things that are only calculated when TH> actually consumed ("realized")? TH> If that's what you mean, I think the answer is no. Yes, that's what I mean. In Haskell such lists are simply part of the core language; Perl 5 can hack them together with list accessors; Perl 6 has them in the core too... I think "lazy list" is a popular term for the general facility? I'm surprised no one has needed them, whatever the name :) Slightly related: is there a general memoization package or standard approach to memoizing functions? Ted ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 17:12 ` Ted Zlatanov @ 2011-03-23 17:46 ` Thierry Volpiatto 2011-03-23 18:09 ` Ted Zlatanov 2011-03-23 19:03 ` Tassilo Horn 1 sibling, 1 reply; 23+ messages in thread From: Thierry Volpiatto @ 2011-03-23 17:46 UTC (permalink / raw) To: emacs-devel Hi Ted, Ted Zlatanov <tzz@lifelogs.com> writes: > On Wed, 23 Mar 2011 17:45:35 +0100 Tassilo Horn <tassilo@member.fsf.org> wrote: > > TH> Ted Zlatanov <tzz@lifelogs.com> writes: >>> Is there a package for general lazy list management in Emacs Lisp? > > TH> What's a lazy list? Something like a LazySeq in Clojure, that is, a > TH> possibly infinite sequence of things that are only calculated when > TH> actually consumed ("realized")? > > TH> If that's what you mean, I think the answer is no. > > Yes, that's what I mean. In Haskell such lists are simply part of the > core language; Perl 5 can hack them together with list accessors; Perl 6 > has them in the core too... I think "lazy list" is a popular term for > the general facility? I'm surprised no one has needed them, whatever > the name :) Not sure to understand what you want, but maybe have a look at some ioccur.el functions: --8<---------------cut here---------------start------------->8--- ELISP> (setq A '(a b c d)) (a b c d) ELISP> (setq it (ioccur-iter-circular A)) [...] ELISP> (ioccur-iter-next it) a ELISP> (ioccur-iter-next it) b ELISP> (ioccur-iter-next it) c ELISP> (ioccur-iter-next it) d ELISP> (ioccur-iter-next it) a ELISP> (ioccur-iter-next it) b ELISP> (ioccur-iter-next it) c ELISP> (ioccur-iter-next it) d ELISP> (ioccur-iter-next it) a --8<---------------cut here---------------end--------------->8--- etc...etc... > Slightly related: is there a general memoization package or standard > approach to memoizing functions? > > Ted > > > -- A+ Thierry Get my Gnupg key: gpg --keyserver pgp.mit.edu --recv-keys 59F29997 ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 17:46 ` Thierry Volpiatto @ 2011-03-23 18:09 ` Ted Zlatanov 2011-03-23 18:27 ` Thierry Volpiatto 0 siblings, 1 reply; 23+ messages in thread From: Ted Zlatanov @ 2011-03-23 18:09 UTC (permalink / raw) To: emacs-devel On Wed, 23 Mar 2011 18:46:16 +0100 Thierry Volpiatto <thierry.volpiatto@gmail.com> wrote: TV> Not sure to understand what you want, but maybe have a look at some TV> ioccur.el functions: ELISP> (setq A '(a b c d)) TV> (a b c d) ELISP> (setq it (ioccur-iter-circular A)) That's useful but I was thinking more of infinite lists, e.g. http://landoflisp.com/lazy.lisp (that's a CL implementation but the ELisp equivalent shouldn't be too bad). Ted ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 18:09 ` Ted Zlatanov @ 2011-03-23 18:27 ` Thierry Volpiatto 2011-03-23 20:33 ` Ted Zlatanov 0 siblings, 1 reply; 23+ messages in thread From: Thierry Volpiatto @ 2011-03-23 18:27 UTC (permalink / raw) To: emacs-devel Ted Zlatanov <tzz@lifelogs.com> writes: > On Wed, 23 Mar 2011 18:46:16 +0100 Thierry Volpiatto <thierry.volpiatto@gmail.com> wrote: > > TV> Not sure to understand what you want, but maybe have a look at some > TV> ioccur.el functions: > ELISP> (setq A '(a b c d)) > TV> (a b c d) > > ELISP> (setq it (ioccur-iter-circular A)) > > That's useful but I was thinking more of infinite lists, In this case ioccur-iter-circular produce infinite list. > e.g. http://landoflisp.com/lazy.lisp (that's a CL implementation but the > ELisp equivalent shouldn't be too bad). Didn't look carefuly, but it seem to be the same mechanism, with closures. -- A+ Thierry Get my Gnupg key: gpg --keyserver pgp.mit.edu --recv-keys 59F29997 ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 18:27 ` Thierry Volpiatto @ 2011-03-23 20:33 ` Ted Zlatanov 2011-03-23 20:43 ` Ted Zlatanov 0 siblings, 1 reply; 23+ messages in thread From: Ted Zlatanov @ 2011-03-23 20:33 UTC (permalink / raw) To: emacs-devel On Wed, 23 Mar 2011 19:27:54 +0100 Thierry Volpiatto <thierry.volpiatto@gmail.com> wrote: TV> Ted Zlatanov <tzz@lifelogs.com> writes: >> On Wed, 23 Mar 2011 18:46:16 +0100 Thierry Volpiatto <thierry.volpiatto@gmail.com> wrote: >> TV> Not sure to understand what you want, but maybe have a look at some TV> ioccur.el functions: ELISP> (setq A '(a b c d)) TV> (a b c d) >> ELISP> (setq it (ioccur-iter-circular A)) >> >> That's useful but I was thinking more of infinite lists, TV> In this case ioccur-iter-circular produce infinite list. Hmm, it's not really what I had in mind, although it's certainly useful... The ioccur.el code returns an iterator across an existing collection. I need the next element dynamically generated, not retrieved from a pre-existing collection. The idea is to avoid the memory and CPU usage until you know you need the data. I think Tassilo's macro or something similar with closures is closer to my need and the general meaning of "lazy lists." Ted ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 20:33 ` Ted Zlatanov @ 2011-03-23 20:43 ` Ted Zlatanov 0 siblings, 0 replies; 23+ messages in thread From: Ted Zlatanov @ 2011-03-23 20:43 UTC (permalink / raw) To: emacs-devel On Wed, 23 Mar 2011 15:33:44 -0500 Ted Zlatanov <tzz@lifelogs.com> wrote: TZ> I think Tassilo's macro or something similar with closures is closer to TZ> my need and the general meaning of "lazy lists." s/Tassilo's macro/the landoflisp.com implementation/ Sorry for the confusion. Ted ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 17:12 ` Ted Zlatanov 2011-03-23 17:46 ` Thierry Volpiatto @ 2011-03-23 19:03 ` Tassilo Horn 2011-03-23 19:10 ` Tassilo Horn 2011-03-23 20:26 ` Ted Zlatanov 1 sibling, 2 replies; 23+ messages in thread From: Tassilo Horn @ 2011-03-23 19:03 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel Ted Zlatanov <tzz@lifelogs.com> writes: Hi Ted, > Yes, that's what I mean. In Haskell such lists are simply part of the > core language; Perl 5 can hack them together with list accessors; Perl > 6 has them in the core too... I think "lazy list" is a popular term > for the general facility? I'm surprised no one has needed them, > whatever the name :) Lately, I do some Clojure coding for fun, and I really enjoy lazy seqs there. However, I don't see a real use case in emacs. So, pants off, what are you planning to do? > Slightly related: is there a general memoization package or standard > approach to memoizing functions? I think for "real" memoization, you need clojures. However, I think you can simulate memoization with a macro like that (tested only very briefly). --8<---------------cut here---------------start------------->8--- (defmacro memoize (name fun) (let ((map-name (gensym "memo-map")) (args-name (gensym)) (val-name (gensym))) `(progn (defvar ,map-name (make-hash-table :test 'equal)) (defun ,name (&rest ,args-name) (let ((,val-name (gethash ,args-name ,map-name))) (if ,val-name ,val-name (puthash ,args-name (apply (quote ,fun) ,args-name) ,map-name))))))) ;; Create a memoized version of + (memoize memo-+ +) ;; Call it (memo-+ 1 1) ;; ==> 2 (memo-+) ;; ==> 2, not computed by looked up in the hash table --8<---------------cut here---------------end--------------->8--- Bye, Tassilo ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 19:03 ` Tassilo Horn @ 2011-03-23 19:10 ` Tassilo Horn 2011-03-23 19:42 ` Ted Zlatanov 2011-03-23 20:03 ` Stefan Monnier 2011-03-23 20:26 ` Ted Zlatanov 1 sibling, 2 replies; 23+ messages in thread From: Tassilo Horn @ 2011-03-23 19:10 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel Tassilo Horn <tassilo@member.fsf.org> writes: > I think for "real" memoization, you need clojures. However, I think > you can simulate memoization with a macro like that (tested only very > briefly). > > (defmacro memoize (name fun) > (let ((map-name (gensym "memo-map")) > (args-name (gensym)) > (val-name (gensym))) > `(progn > (defvar ,map-name (make-hash-table :test 'equal)) > (defun ,name (&rest ,args-name) > (let ((,val-name (gethash ,args-name ,map-name))) > (if ,val-name > ,val-name > (puthash ,args-name (apply (quote ,fun) ,args-name) > ,map-name))))))) Just a short remark on what I've had in mind with "real" memoization: If elisp had closures (not clojures ;-)), then one could write memoize as function, just like the variant in the clojure source code below: --8<---------------cut here---------------start------------->8--- (defn memoize [f] (let [mem (atom {})] (fn [& args] (if-let [e (find @mem args)] (val e) (let [ret (apply f args)] (swap! mem assoc args ret) ret))))) --8<---------------cut here---------------end--------------->8--- Bye, Tassilo ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 19:10 ` Tassilo Horn @ 2011-03-23 19:42 ` Ted Zlatanov 2011-03-24 5:27 ` Eric Schulte 2011-03-23 20:03 ` Stefan Monnier 1 sibling, 1 reply; 23+ messages in thread From: Ted Zlatanov @ 2011-03-23 19:42 UTC (permalink / raw) To: emacs-devel On Wed, 23 Mar 2011 20:10:27 +0100 Tassilo Horn <tassilo@member.fsf.org> wrote: TH> Just a short remark on what I've had in mind with "real" memoization: If TH> elisp had closures (not clojures ;-)), then one could write memoize as TH> function I think `lexical-let' (according to the docstring at least) creates true CL-style closures in ELisp. Ted ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 19:42 ` Ted Zlatanov @ 2011-03-24 5:27 ` Eric Schulte 2011-03-24 15:43 ` Ted Zlatanov 0 siblings, 1 reply; 23+ messages in thread From: Eric Schulte @ 2011-03-24 5:27 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 612 bytes --] Ted Zlatanov <tzz@lifelogs.com> writes: > On Wed, 23 Mar 2011 20:10:27 +0100 Tassilo Horn <tassilo@member.fsf.org> wrote: > > TH> Just a short remark on what I've had in mind with "real" memoization: If > TH> elisp had closures (not clojures ;-)), then one could write memoize as > TH> function > > I think `lexical-let' (according to the docstring at least) creates true > CL-style closures in ELisp. > Just for completeness, a lazy.el file is attached implementing lazy sequences in Emacs Lisp. This is basically an exact copy of lazy.lisp with `lexical-let' used where closures are needed. Best -- Eric [-- Attachment #2: lazy.el --] [-- Type: application/emacs-lisp, Size: 1974 bytes --] ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-24 5:27 ` Eric Schulte @ 2011-03-24 15:43 ` Ted Zlatanov 2011-03-25 12:30 ` Eric Schulte 0 siblings, 1 reply; 23+ messages in thread From: Ted Zlatanov @ 2011-03-24 15:43 UTC (permalink / raw) To: emacs-devel On Wed, 23 Mar 2011 23:27:48 -0600 "Eric Schulte" <schulte.eric@gmail.com> wrote: ES> Just for completeness, a lazy.el file is attached implementing lazy ES> sequences in Emacs Lisp. This is basically an exact copy of lazy.lisp ES> with `lexical-let' used where closures are needed. Thanks, Eric. I'm not sure of the http://landoflisp.com/lazy.lisp license. There's also http://www.common-lisp.org/project/clazy (very similar to lazy.lisp), http://cl-heresy.sourceforge.net/Heresy.htm, http://common-lisp.net/project/funds, and http://www.common-lisp.org/project/fset all of which have different and viable implementations (the common name seems to be "purely functional data structures"). They all refer to SICP as a reference since it has a similar implementation of the basic idea. Of all of them, lazy.lisp seems most basic; funds and fset seem very data-oriented. Heresy seems like the most comprehensive and powerful package (see http://cl-heresy.sourceforge.net/Heresy.htm for examples, details, and functions provided). I'd love to use it but I don't know CL well so it will take me some time to port it. Still, it has a BSD license and should be OK as an ELPA package. Does that sound reasonable? Eric, are you interested in helping me port it? Thanks Ted ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-24 15:43 ` Ted Zlatanov @ 2011-03-25 12:30 ` Eric Schulte 0 siblings, 0 replies; 23+ messages in thread From: Eric Schulte @ 2011-03-25 12:30 UTC (permalink / raw) To: Ted Zlatanov; +Cc: emacs-devel Ted Zlatanov <tzz@lifelogs.com> writes: > On Wed, 23 Mar 2011 23:27:48 -0600 "Eric Schulte" <schulte.eric@gmail.com> wrote: > > ES> Just for completeness, a lazy.el file is attached implementing lazy > ES> sequences in Emacs Lisp. This is basically an exact copy of lazy.lisp > ES> with `lexical-let' used where closures are needed. > > Thanks, Eric. I'm not sure of the http://landoflisp.com/lazy.lisp > license. There's also http://www.common-lisp.org/project/clazy (very > similar to lazy.lisp), http://cl-heresy.sourceforge.net/Heresy.htm, > http://common-lisp.net/project/funds, and > http://www.common-lisp.org/project/fset all of which have different and > viable implementations (the common name seems to be "purely functional > data structures"). They all refer to SICP as a reference since it has a > similar implementation of the basic idea. Of all of them, lazy.lisp > seems most basic; funds and fset seem very data-oriented. > > Heresy seems like the most comprehensive and powerful package (see > http://cl-heresy.sourceforge.net/Heresy.htm for examples, details, and > functions provided). I'd love to use it but I don't know CL well so it > will take me some time to port it. Still, it has a BSD license and > should be OK as an ELPA package. Does that sound reasonable? Eric, are > you interested in helping me port it? > Sure, I can't guarantee any significant time commitment, but this would serve as a good CL learning experience for me, so count me as /on board/ to help to port cl-heresy to elisp. As a first step, I've copied the latest release of cl-heresy into a git repository on repo.or.cz [1]. Anyone can anonymously push to the mob branch of this repo (see [2]), and anyone who's interested in helping can send me their repo.or.cz username and I'll grant push permission for the master branch. Best -- Eric Footnotes: [1] http://repo.or.cz/w/el-heresy.git [2] http://repo.or.cz/h/mob.html ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 19:10 ` Tassilo Horn 2011-03-23 19:42 ` Ted Zlatanov @ 2011-03-23 20:03 ` Stefan Monnier 2011-03-23 20:14 ` Jason Earl 2011-03-23 20:18 ` Tassilo Horn 1 sibling, 2 replies; 23+ messages in thread From: Stefan Monnier @ 2011-03-23 20:03 UTC (permalink / raw) To: Tassilo Horn; +Cc: Ted Zlatanov, emacs-devel > Just a short remark on what I've had in mind with "real" memoization: If > elisp had closures (not clojures ;-)), then one could write memoize as > function, just like the variant in the clojure source code below: On a related note: Emacs has had closures for "ever", tho it only closes over variables that are bound by `lexical-let' (provided by CL). Emacs-24 will have a more integrated and efficient support for closures, by setting the `lexical-binding' variable which makes `let' bind lexically in the same way as in Common-Lisp. You can try it out right now in the `lexbind-new' branch which is pretty much ready for inclusion (mostly lacks testing, and has currently 1 open bug apparently around eieio; additional testers are welcome). Stefan ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 20:03 ` Stefan Monnier @ 2011-03-23 20:14 ` Jason Earl 2011-03-23 20:19 ` Tassilo Horn 2011-03-23 20:18 ` Tassilo Horn 1 sibling, 1 reply; 23+ messages in thread From: Jason Earl @ 2011-03-23 20:14 UTC (permalink / raw) To: Stefan Monnier; +Cc: Tassilo Horn, Ted Zlatanov, emacs-devel On Wed, Mar 23 2011, Stefan Monnier wrote: >> Just a short remark on what I've had in mind with "real" memoization: If >> elisp had closures (not clojures ;-)), then one could write memoize as >> function, just like the variant in the clojure source code below: > > On a related note: > Emacs has had closures for "ever", tho it only closes over variables > that are bound by `lexical-let' (provided by CL). Emacs-24 will have > a more integrated and efficient support for closures, by setting the > `lexical-binding' variable which makes `let' bind lexically in the same > way as in Common-Lisp. You can try it out right now in the > `lexbind-new' branch which is pretty much ready for inclusion (mostly > lacks testing, and has currently 1 open bug apparently around eieio; > additional testers are welcome). > > > Stefan Do you have a url for the branch? Jason ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 20:14 ` Jason Earl @ 2011-03-23 20:19 ` Tassilo Horn 0 siblings, 0 replies; 23+ messages in thread From: Tassilo Horn @ 2011-03-23 20:19 UTC (permalink / raw) To: Jason Earl; +Cc: Ted Zlatanov, Stefan Monnier, emacs-devel Jason Earl <jearl@notengoamigos.org> writes: > Do you have a url for the branch? bzr://bzr.savannah.gnu.org/emacs/lexbind-new/ Bye, Tassilo ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 20:03 ` Stefan Monnier 2011-03-23 20:14 ` Jason Earl @ 2011-03-23 20:18 ` Tassilo Horn 2011-03-23 20:41 ` Tassilo Horn 1 sibling, 1 reply; 23+ messages in thread From: Tassilo Horn @ 2011-03-23 20:18 UTC (permalink / raw) To: Stefan Monnier; +Cc: Ted Zlatanov, emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: Hi Stefan, > Emacs has had closures for "ever", tho it only closes over variables > that are bound by `lexical-let' (provided by CL). Emacs-24 will have > a more integrated and efficient support for closures, by setting the > `lexical-binding' variable which makes `let' bind lexically in the > same way as in Common-Lisp. You can try it out right now in the > `lexbind-new' branch which is pretty much ready for inclusion (mostly > lacks testing, and has currently 1 open bug apparently around eieio; > additional testers are welcome). I've started compiling and will report issues if I find one in my daily use. I guess, that there are many packages that won't work with lexical-binding set to t, right? I mean, at least I've seen code that uses let in order to save some parameters, like (let ((foo "bar")) (function-that-does-something-with-foo)) without defvar-ing foo. I might be wrong, but I think I remember org-mode did so in some places... Bye, Tassilo ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 20:18 ` Tassilo Horn @ 2011-03-23 20:41 ` Tassilo Horn 2011-03-23 21:51 ` Stefan Monnier 0 siblings, 1 reply; 23+ messages in thread From: Tassilo Horn @ 2011-03-23 20:41 UTC (permalink / raw) To: Stefan Monnier; +Cc: Ted Zlatanov, emacs-devel Tassilo Horn <tassilo@member.fsf.org> writes: >> You can try it out right now in the `lexbind-new' branch which is >> pretty much ready for inclusion (mostly lacks testing, and has >> currently 1 open bug apparently around eieio; additional testers are >> welcome). > > I've started compiling Compiled it. --8<---------------cut here---------------start------------->8--- (setq lexical-binding t) (let ((x 1)) (defun lex-test (y) (+ x y))) (lex-test 1) ;; ==> 2 --8<---------------cut here---------------end--------------->8--- Wow! :-) > and will report issues if I find one in my daily use. Found one! C-h k lexical-binding RET errors. I've reported it, but the confirmation mail has not yet arrived. > I guess, that there are many packages that won't work with > lexical-binding set to t, right? Seems to be a false assumption. At least org and Gnus are running fine. Bye, Tassilo ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 20:41 ` Tassilo Horn @ 2011-03-23 21:51 ` Stefan Monnier 2011-03-24 7:26 ` Tassilo Horn 0 siblings, 1 reply; 23+ messages in thread From: Stefan Monnier @ 2011-03-23 21:51 UTC (permalink / raw) To: Tassilo Horn; +Cc: Ted Zlatanov, emacs-devel > (let ((x 1)) > (defun lex-test (y) > (+ x y))) Note that the byte-compiler won't like the above. You'll want either (let ((x 1)) (defalias 'lex-test (lambda (y) (+ x y)))) or (defalias 'lex-test (let ((x 1)) (lambda (y) (+ x y)))) or something like that. >> and will report issues if I find one in my daily use. > Found one! C-h k lexical-binding RET errors. Hmm... works here. > I've reported it, but the confirmation mail has not yet arrived. I'll wait for the precise report, then. >> I guess, that there are many packages that won't work with >> lexical-binding set to t, right? Indeed. Tho check the Elisp manual for hints about how to convert (it's usually pretty easy). > Seems to be a false assumption. At least org and Gnus are running fine. I think you're misunderstanding your test, because I doubt either of Gnus or Org would work with lexical-binding without any additional modification. lexical-binding is a variable that applies to a file/buffer. E.g. it affects the compiler but not the compiled code. Stefan ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 21:51 ` Stefan Monnier @ 2011-03-24 7:26 ` Tassilo Horn 0 siblings, 0 replies; 23+ messages in thread From: Tassilo Horn @ 2011-03-24 7:26 UTC (permalink / raw) To: Stefan Monnier; +Cc: Ted Zlatanov, emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: Hi Stefan, > Note that the byte-compiler won't like the above. You'll want either > > (let ((x 1)) > (defalias 'lex-test (lambda (y) (+ x y)))) > > or > > (defalias 'lex-test (let ((x 1)) (lambda (y) (+ x y)))) > > or something like that. Yes, I know, just wanted to check if it works at all. >>> and will report issues if I find one in my daily use. >> Found one! C-h k lexical-binding RET errors. > > Hmm... works here. Strange. >> I've reported it, but the confirmation mail has not yet arrived. > > I'll wait for the precise report, then. Oh, I'll have to add that this happens for any describe command, no matter what I describe. First I get that error, but after quitting the debugger, I get the *Help* buffer anyway... >>> I guess, that there are many packages that won't work with >>> lexical-binding set to t, right? > > Indeed. Tho check the Elisp manual for hints about how to convert > (it's usually pretty easy). Great, I'll see if I can help with some patches for transitioning the packages I'm using most. >> Seems to be a false assumption. At least org and Gnus are running >> fine. > > I think you're misunderstanding your test, because I doubt either of > Gnus or Org would work with lexical-binding without any additional > modification. lexical-binding is a variable that applies to a > file/buffer. E.g. it affects the compiler but not the compiled code. Ah, ok. In the mean time, I've found out that Gnus does not build (byte-compile) at all with a lexical-binding set to t. Bye, Tassilo ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: general lazy list facility for Emacs Lisp? 2011-03-23 19:03 ` Tassilo Horn 2011-03-23 19:10 ` Tassilo Horn @ 2011-03-23 20:26 ` Ted Zlatanov 1 sibling, 0 replies; 23+ messages in thread From: Ted Zlatanov @ 2011-03-23 20:26 UTC (permalink / raw) To: emacs-devel On Wed, 23 Mar 2011 20:03:06 +0100 Tassilo Horn <tassilo@member.fsf.org> wrote: TH> Lately, I do some Clojure coding for fun, and I really enjoy lazy seqs TH> there. However, I don't see a real use case in emacs. So, pants off, TH> what are you planning to do? If I mention Haskell and Perl 6 in a sentence you can assume it's mostly theoretical utility ;) Seriously though, I want to use them for some private ELisp work looking at large data sets. They fit the data model well. Ted ^ permalink raw reply [flat|nested] 23+ messages in thread
* RE: general lazy list facility for Emacs Lisp? 2011-03-23 16:45 ` Tassilo Horn 2011-03-23 17:12 ` Ted Zlatanov @ 2011-03-23 17:13 ` Drew Adams 1 sibling, 0 replies; 23+ messages in thread From: Drew Adams @ 2011-03-23 17:13 UTC (permalink / raw) To: 'Tassilo Horn', 'Ted Zlatanov'; +Cc: emacs-devel > > Is there a package for general lazy list management in Emacs Lisp? > > What's a lazy list? Something like a LazySeq in Clojure, that is, a > possibly infinite sequence of things that are only calculated when > actually consumed ("realized")? > > If that's what you mean, I think the answer is no. My guess is yes, that's what he meant. Lazy lists in Lisp date from this paper, at least: "Daniel P. Friedman and David S. Wise. "Cons should not evaluate its arguments," in S. Michaelson and R. Milner (eds.) Automata, Languages and Programming, Edinburgh University Press (Edinburgh, 1976), 257--284." This is probably pretty much the same paper: "Friedman, Daniel P. (1976). Cons should not evaluate its arguments. ICALP." ^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2011-03-25 12:30 UTC | newest] Thread overview: 23+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-03-23 15:07 general lazy list facility for Emacs Lisp? Ted Zlatanov 2011-03-23 16:45 ` Tassilo Horn 2011-03-23 17:12 ` Ted Zlatanov 2011-03-23 17:46 ` Thierry Volpiatto 2011-03-23 18:09 ` Ted Zlatanov 2011-03-23 18:27 ` Thierry Volpiatto 2011-03-23 20:33 ` Ted Zlatanov 2011-03-23 20:43 ` Ted Zlatanov 2011-03-23 19:03 ` Tassilo Horn 2011-03-23 19:10 ` Tassilo Horn 2011-03-23 19:42 ` Ted Zlatanov 2011-03-24 5:27 ` Eric Schulte 2011-03-24 15:43 ` Ted Zlatanov 2011-03-25 12:30 ` Eric Schulte 2011-03-23 20:03 ` Stefan Monnier 2011-03-23 20:14 ` Jason Earl 2011-03-23 20:19 ` Tassilo Horn 2011-03-23 20:18 ` Tassilo Horn 2011-03-23 20:41 ` Tassilo Horn 2011-03-23 21:51 ` Stefan Monnier 2011-03-24 7:26 ` Tassilo Horn 2011-03-23 20:26 ` Ted Zlatanov 2011-03-23 17:13 ` Drew Adams
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).