From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Michael Heerdegen Newsgroups: gmane.emacs.help Subject: Re: replacing a function with another one Date: Thu, 13 Mar 2014 08:19:12 +0100 Message-ID: <87siqmy39r.fsf@web.de> References: <87vbvofsi6.fsf@yun.yagibdah.de> <87bnxgs4r9.fsf@web.de> <87lhwj1cfz.fsf@yun.yagibdah.de> <87zjkz6vd5.fsf@web.de> <8738ir161u.fsf@yun.yagibdah.de> <87eh2b6nfm.fsf@web.de> <87r46anab5.fsf@yun.yagibdah.de> <87wqg2u77k.fsf@web.de> <87pplugjh6.fsf@yun.yagibdah.de> <8738ipd2kh.fsf@web.de> <87y50gj1uf.fsf@yun.yagibdah.de> <874n34ticd.fsf@web.de> <87bnxcrloa.fsf@web.de> <87vbvjmq0h.fsf@yun.yagibdah.de> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: ger.gmane.org 1394695188 26120 80.91.229.3 (13 Mar 2014 07:19:48 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 13 Mar 2014 07:19:48 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Thu Mar 13 08:19:54 2014 Return-path: Envelope-to: geh-help-gnu-emacs@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 1WNzvk-0004nb-85 for geh-help-gnu-emacs@m.gmane.org; Thu, 13 Mar 2014 08:19:52 +0100 Original-Received: from localhost ([::1]:37262 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WNzvj-0001HI-Or for geh-help-gnu-emacs@m.gmane.org; Thu, 13 Mar 2014 03:19:51 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:55233) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WNzvS-0001H6-Dl for help-gnu-emacs@gnu.org; Thu, 13 Mar 2014 03:19:40 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WNzvM-0007o2-8B for help-gnu-emacs@gnu.org; Thu, 13 Mar 2014 03:19:34 -0400 Original-Received: from plane.gmane.org ([80.91.229.3]:49735) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WNzvM-0007nt-0n for help-gnu-emacs@gnu.org; Thu, 13 Mar 2014 03:19:28 -0400 Original-Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1WNzvK-0004Oo-Nf for help-gnu-emacs@gnu.org; Thu, 13 Mar 2014 08:19:26 +0100 Original-Received: from ip-90-186-45-80.web.vodafone.de ([90.186.45.80]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 13 Mar 2014 08:19:26 +0100 Original-Received: from michael_heerdegen by ip-90-186-45-80.web.vodafone.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 13 Mar 2014 08:19:26 +0100 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 71 Original-X-Complaints-To: usenet@ger.gmane.org X-Gmane-NNTP-Posting-Host: ip-90-186-45-80.web.vodafone.de User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) Cancel-Lock: sha1:hgxiYubl0o1Fe0LqXz6zlFzoeoo= X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 80.91.229.3 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:96488 Archived-At: lee writes: > So what is that supposed to mean? `let' keeps driving me insane already > because it requires so many brackets. Then finally, I do something like > > > (let ((end-marker (concat "^" comment-start lsl-hi-lock-patterns-end-marker)) > ((marker-pos (re-search-forward end-marker (point-max) t)))) > (do-stuff)) > > > and it doesn´t work because end-marker is undefined despite I just > defined it :( So I have > > > (let ((end-marker (concat "^" comment-start lsl-hi-lock-patterns-end-marker))) > (let ((marker-pos (re-search-forward end-marker (point-max) t))) > (do-something))) > The functionality you want, and that you reached with the nested `let', is exactly what `let*' does. When I was learning LISP, I was also confused about `let'. Standard `let' first evaluates all expressions, then binds the variables, so in works "parallel" - see (info "(elisp) Local Variables") > And in the end, I´m left with the unanswerable question of how to > intentionally returning something in particular from a function: > > > (defun lsl-get-patterns-from-file (file) > "Read hi-lock-mode highlighting-patterns from a file and return > the patterns read." > (with-current-buffer > (find-file-noselect file) > (goto-char (point-min)) > (let ((end-marker (concat "^" comment-start lsl-hi-lock-patterns-end-marker))) > (let ((marker-pos (re-search-forward end-marker (point-max) t))) > (when marker-pos > (goto-char marker-pos) > (previous-line) > (end-of-line) > (setq marker-pos (point)) > (goto-char (point-min)) > (message "reading hi-lock patterns from %s (%d..%d)" > (buffer-name) > (point-min) marker-pos) > (let ((patterns nil)) > (while (< (point) marker-pos) > (setq patterns (append (read (current-buffer)) patterns))) > (setq patterns patterns))))))) > > > I need this function to return `patterns'. Without the last line, it > seems to return nil because the setq is enclosed in the while. `let' returns the value returned by the last body expression (in particular, that isn't necessarily the value of the variable `patterns' in your example!). And `while' always returns nil (strictly speaking, the return value isn't documented, so don't rely on it at all). So this is what you want: (let ((patterns nil)) (while (< (point) marker-pos) (setq patterns (append (read (current-buffer)) patterns))) patterns) Michael.