From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Burton Samograd Newsgroups: gmane.emacs.devel Subject: Re: RFC: rough draft of Python-style generators for elisp Date: Tue, 27 Nov 2012 08:31:29 -0700 Message-ID: References: <50B4309C.5000109@dancol.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1354031225 10339 80.91.229.3 (27 Nov 2012 15:47:05 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 27 Nov 2012 15:47:05 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Nov 27 16:47:17 2012 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1TdNNR-0002dX-Nk for ged-emacs-devel@m.gmane.org; Tue, 27 Nov 2012 16:47:13 +0100 Original-Received: from localhost ([::1]:43961 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TdNNG-0005Gx-Na for ged-emacs-devel@m.gmane.org; Tue, 27 Nov 2012 10:47:02 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:58068) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TdNNE-0005Go-Oj for emacs-devel@gnu.org; Tue, 27 Nov 2012 10:47:01 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TdNNB-0003Qa-6z for emacs-devel@gnu.org; Tue, 27 Nov 2012 10:47:00 -0500 Original-Received: from plane.gmane.org ([80.91.229.3]:53202) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TdNNA-0003QS-W3 for emacs-devel@gnu.org; Tue, 27 Nov 2012 10:46:57 -0500 Original-Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1TdNNG-0002U8-V6 for emacs-devel@gnu.org; Tue, 27 Nov 2012 16:47:02 +0100 Original-Received: from samograd.ca ([69.90.114.176]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 27 Nov 2012 16:47:02 +0100 Original-Received: from burton by samograd.ca with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 27 Nov 2012 16:47:02 +0100 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 48 Original-X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: samograd.ca User-Agent: Gnus/5.1299999999999999 (Gnus v5.13) Emacs/24.2.90 (cygwin) Cancel-Lock: sha1:sKO5tZg4yLv1Y4OuuMN/j1Mz32E= X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 80.91.229.3 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:155108 Archived-At: Daniel Colascione writes: > Over at https://github.com/dcolascione/elisp-generators, I have a > pure-elisp implementation of Python-style generators for elisp. > Perhaps the feature is best illustrate by example: > > (defgenerator mygen (i) > (yield 1) > (yield i) > (yield 3)) > > (let ((gen (mygen 100))) > (list (funcall gen) > (funcall gen) > (funcall gen))) > > -> (1 100 3) > > Yields can appear in arbitrary code: > > (defgenerator mygen2 (lim) > (loop for x from 0 to lim do (yield x))) > > The package works by rewriting elisp into continuation-passing form > and closing over the resulting continuations with a driver loop that > transitions from one continuation-state to the next. After the last > yield, the facility signals generator-ended. > > Please take a look. It'd be nice if there were cl-loop extensions to > iterate over the things, and if generators were available with regular > defun the way yield is available with regular "def" in Python. When I try and byte-compile your package I get the following: ~/src/emacs-git/lisp/emacs-lisp/generators $ emacs -q --batch --eval "(byte-compile-file \"generator.el\")" ... ... generator.el:244:1:Warning: Argument "%s not supported in generators" is not a lexical variable generator.el:244:1:Warning: Unused lexical argument `defvar' generator.el:244:1:Warning: Unused lexical argument `error' generator.el:244:1:Error: Invalid lambda variable %s not supported in generators ~/src/emacs-git/lisp/emacs-lisp/generators $ emacs --batch --eval "(print (emacs-version))" "GNU Emacs 24.2.90.1 (i686-pc-cygwin, X toolkit, Xaw3d scroll bars) of 2012-11-27 on CDW764-BURTONS" -- Burton Samograd