help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Understanding the "let" construct and the setting of variables


From: Jean Louis
Subject: Re: Understanding the "let" construct and the setting of variables
Date: Thu, 17 Dec 2020 07:34:51 +0300
User-agent: Mutt/2.0 (3d08634) (2020-11-07)

> -*- lexical-binding: t; -*-
* steve-humphreys@gmx.com <steve-humphreys@gmx.com> [2020-12-17 03:26]:
> Let's introspect two questions.
> 
> 1. In what simple circumstances would one use a "setq" in the body
> of a let?

Whenever I find myself in linear programming within a function and
need to change variable I will use setq. Some global variables are
rather set with setq:

    (set-buffer buffer)
    (setq header-line-format (concat buffer " ➜ Finish with `q' or `h'"))
    (cf-org-view-mode)
    (insert blob)
    (setq org-hierarchical-todo-statistics nil)
    (org-update-parent-todo-statistics)
    (goto-char 1)

But I will often use it in construction of lists:

(defun rcd-cgi-parse-query-string (query-string)
  "Parse QUERY-STRING that normally comes from the environment
variable `QUERY_STRING'. Return PLIST."
  (let* ((query-string (url-unhex-string query-string))
         (parts (split-string query-string "&"))
         (length (length parts))
         (plist '()))
    (dolist (part parts plist)
      (let* ((data (split-string part "="))
             (prop (car data))
             (val (cadr data)))
        (setq plist (plist-put plist (intern prop) val))))))


(defun iota (count &optional start step)
  "Return a list containing COUNT numbers, starting from START
and adding STEP each time.  The default START is 0, the default
STEP is 1"
  (let* ((start (if start start 0))
         (step (if step step 1))
         (last (+ start count))
         (counter 0)
         (list '())
         (elt start))
    (while (< counter count)
      (push elt list)
      (setq elt (+ elt step))
      (setq counter (1+ counter)))
    (reverse list)))

How I understand it is that `setq' I can freely use on variables
already defined with and within my `let' as then the variable
will not become global.

(defun my-fun ()
  (let ((my-var nil))
    (setq my-var 2)))

(my-fun)

my-var is not defined

(defun my-fun ()
  (let ((my-var nil)))
  (setq my-var 2))

(my-fun)

my-var is here defined as 2 and became global variable.

And each time that variable is already defined with `defvar' one
can then change it with setq.

Jean



reply via email to

[Prev in Thread] Current Thread [Next in Thread]