[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: replacing a function with another one
From: |
Michael Heerdegen |
Subject: |
Re: replacing a function with another one |
Date: |
Thu, 13 Mar 2014 08:19:12 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) |
lee <lee@yun.yagibdah.de> 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.
- Re: replacing a function with another one, (continued)
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/09
- Re: replacing a function with another one, lee, 2014/03/09
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/09
- Re: replacing a function with another one, lee, 2014/03/10
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/10
- Re: replacing a function with another one, lee, 2014/03/11
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/11
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/12
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/12
- Re: replacing a function with another one, lee, 2014/03/12
- Re: replacing a function with another one,
Michael Heerdegen <=
- Re: replacing a function with another one, lee, 2014/03/15
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/17
- Re: replacing a function with another one, lee, 2014/03/12
- Re: replacing a function with another one, Stefan Monnier, 2014/03/12
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/12
- Re: replacing a function with another one, Stefan Monnier, 2014/03/10
- Re: replacing a function with another one, lee, 2014/03/10
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/10
- Re: replacing a function with another one, Michael Heerdegen, 2014/03/10
- Re: replacing a function with another one, lee, 2014/03/11