From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Nikos Apostolakis Newsgroups: gmane.emacs.help Subject: Need help in understanding an example of recursion Date: Sat, 02 Jun 2007 12:09:19 -0400 Message-ID: <87vee6wd74.fsf@Sullivan.bcc.cuny.edu> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: sea.gmane.org 1180804737 392 80.91.229.12 (2 Jun 2007 17:18:57 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Sat, 2 Jun 2007 17:18:57 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Sat Jun 02 19:18:56 2007 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1HuXFg-000212-0b for geh-help-gnu-emacs@m.gmane.org; Sat, 02 Jun 2007 19:18:56 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HuXFf-0006QU-Bo for geh-help-gnu-emacs@m.gmane.org; Sat, 02 Jun 2007 13:18:55 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HuXFP-0006QF-Vo for help-gnu-emacs@gnu.org; Sat, 02 Jun 2007 13:18:40 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HuXFO-0006Q3-D4 for help-gnu-emacs@gnu.org; Sat, 02 Jun 2007 13:18:39 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HuXFO-0006Q0-72 for help-gnu-emacs@gnu.org; Sat, 02 Jun 2007 13:18:38 -0400 Original-Received: from main.gmane.org ([80.91.229.2] helo=ciao.gmane.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1HuXFN-0007eM-Mh for help-gnu-emacs@gnu.org; Sat, 02 Jun 2007 13:18:38 -0400 Original-Received: from list by ciao.gmane.org with local (Exim 4.43) id 1HuWx5-0006yO-CP for help-gnu-emacs@gnu.org; Sat, 02 Jun 2007 18:59:43 +0200 Original-Received: from 199.219.160.30 ([199.219.160.30]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 02 Jun 2007 18:59:43 +0200 Original-Received: from nikos.ap by 199.219.160.30 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 02 Jun 2007 18:59:43 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 44 Original-X-Complaints-To: usenet@sea.gmane.org X-Gmane-NNTP-Posting-Host: 199.219.160.30 User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/23.0.51 (gnu/linux) Cancel-Lock: sha1:FFcUHJ20Qq7gSXlQF57LNz12WZ8= X-detected-kernel: Linux 2.6, seldom 2.4 (older, 4) X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:44621 Archived-At: Hello group, I was browsing the source code of SAGE, and I tried to implement in elisp the function that computes all the partitions of an integer n. So I did the following: (defun nea-partitions (n) "Return a list with all partitions of the integer n." (if (= n 0) '(nil) (nea-next-partitions (nea-partitions (- n 1))))) (defun nea-next-partitions (lst) (append (mapcar (lambda (x) (cons 1 x)) lst) (dolist (elt (reverse lst) value) (when (and elt (or (= (length elt) 1) (> (car elt) (cadr elt)))) (setq value (cons (cons (1+ (car elt)) (cdr elt)) value)))))) But this doesn't work: (nea-partitions 0) => (nil) (nea-partitions 1) => ((1)) (nea-partitions 2) => ((1 1) (2)) (nea-partitions 3) => (1 1 1) (1 2) (3) (2)) (nea-next-partitions '((1 1) (2))) => ((1 1 1) (1 2) (3)) (nea-next-partitions (nea-partitions 2)) => ((1 1 1) (1 2) (3) (2)) Is there some subtle[0] point about recursion that I am missing? Any help in understanding this will be greatly appreciated. TIA, Nikos [0] for my level of understanding at least.