unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Swami Tota Ram Shankar <tota_ram@india.com>
To: help-gnu-emacs@gnu.org
Subject: Style Issues in Lisp and Scheme programming, setq versus let  ... and onion structure with multiple cores or eyes or kernels Re: string to list or string to array
Date: Mon, 22 Oct 2012 18:16:58 -0700 (PDT)	[thread overview]
Message-ID: <657d823b-990f-4a2b-a57c-2c644099ddcd@z2g2000yqj.googlegroups.com> (raw)
In-Reply-To: 87zk3f7ey7.fsf@kuiper.lan.informatimago.com

On Oct 21, 1:22 pm, "Pascal J. Bourguignon" <p...@informatimago.com>
wrote:
> Swami Tota Ram Shankar <tota_...@india.com> writes:
>
> > On Oct 21, 4:16 am, "Pascal J. Bourguignon" <p...@informatimago.com>
> > wrote:
> >> Since the syntax of this text is exactly the printed representation of
> >> an emacs lisp vector, you can read it directly with read.
>
> >> (defun get-vectors-from-buffer ()
> >>    (let ((vectors '()))
> >>      (goto-char (point-min))
> >>      (while (re-search-forward "\\[[0-9.+-\\ ]+\\]" nil t)
> >>         (goto-char (match-beginning 0))
> >>         (push (read (current-buffer)) vectors))
> >>      (nreverse vectors)))
>
> >> ;; [1 2 3.0] [4 5 6]
> >> ;; [7 +8 -9]
>
> >> (get-vectors-from-buffer)
> >> --> ([[0-9\.+-\\] +]
> >>      [[0-9\.+-\\] +\\]
> >>      [17.16 -17.16 17.16 17.16 17.16 17.16 17.16 17.16]
> >>      [[0-9\.+-\\] +\\]
> >>      [1 2 3.0]
> >>      [4 5 6]
> >>      [7 8 -9])
>
> > Hi Pascal, Thanks for the reply but there are some problems. I
> > understood your change to regexp.
>
> > However, you are doing too much in your and I need only read one
> > string at a specific location at a time, not the whole buffer.
>
> > Thus, I am having difficulty and need help. Let me write the modified
> > story again.
>
> > (when (looking-at "\\[[0-9.+-\\ ]+\\]")
> > (forward-char (+ (string-width (match-string 0)) 1))
> > (setq V (match-string 0))
> > (setq V (read-from-string (intern (match-string 0))))
>
> 0- What's the purpose of moving the point?
> 1- Don't use setq, use let.
> 2- Don't bind two different things to the same variable!
> 3- read-from-string reads from a string, not a symbol, so why are you
>    interning a symbol?
>
> Let me advise you to read:
>
>           An Introduction to Programming in Emacs Lisp
>          http://www.gnu.org/software/emacs/emacs-lisp-intro/ or  M-: (info "(eintr)Top") RET
>
>    (defun get-vector-at-point ()
>      (when (looking-at "\\[[0-9.+-\\ ]+\\]")
>        (goto-char (match-beginning 0))
>        (read (current-buffer))))
>

Hi Pascal,

I like your advice above a lot, especially concerning setq versus let.

I will later ask you to elaborate more on your point (2), however, for
now I want to focus solely on point (1).


I had to write a wrapper function to one I was writing and I soon ran
into a name space conflict because of setq. Temporarily I relieved,
due to the urgency to complete the task, by renaming the variables.

However, I want an expert such as you to address some style issues in
lisp programming. For this reason, I am renaming my post as

Style Issues in Lisp and Scheme programming, setq versus let

Here are my questions.

Does setq cause some kind of permanent persistence of the variable
like a global?

In the lingo of computer science, such as lexical scoping, dynamic
scoping, static binding, dynamic binding, what is its meaning and what
is the meaning of these four terms?

Even more important question is the impact on program structure and
readability.

For example, the imperative programming style, flows nicely from top
to bottom. The eye has to move L->R and top to bottom to understand
the screenful module, as in C.

I have found that let, and functional style leads to an onion type
structure.

f(g(h(x,y),z,k(alpha,beta,l(theta)))w)

If it is short, its not an issue, but the multiple cores or eyes of
the onion, makes it impossible to grasp the structure.

I ask you to focus your brain intensely and come up with some
COMPELLING rules of thumb, so I can write programs that are readable.

I know, some of you are such brilliant minds that there will not
emerge one in maybe 100 years as smart as you, so write these rules
for newbies.

and sprinkle some examples.

I want to apply to my own thing, but you also tell us how to read
these programs since when I look at yours, it becomes digestable only
after persisting with it and going to the cores and reading inward
out.

Whats your method or habit of reading?

Swami





  reply	other threads:[~2012-10-23  1:16 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-21 10:37 string to list or string to array Swami Tota Ram Shankar
2012-10-21 11:16 ` Pascal J. Bourguignon
2012-10-21 19:03   ` Swami Tota Ram Shankar
2012-10-21 20:22     ` Pascal J. Bourguignon
2012-10-23  1:16       ` Swami Tota Ram Shankar [this message]
2012-10-23  2:36         ` Style Issues in Lisp and Scheme programming, setq versus let ... and onion structure with multiple cores or eyes or kernels " PJ Weisberg
     [not found]         ` <mailman.11503.1350959781.855.help-gnu-emacs@gnu.org>
2012-10-23  3:02           ` Swami Tota Ram Shankar
2012-10-24 15:03             ` Stefan Monnier
2012-10-25  3:20               ` gnuist007
2012-10-25  8:25                 ` José A. Romero L.
2012-11-21 21:56                 ` Pascal J. Bourguignon
2012-10-23  8:15         ` Pascal J. Bourguignon
2012-10-24  8:05         ` Thien-Thi Nguyen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=657d823b-990f-4a2b-a57c-2c644099ddcd@z2g2000yqj.googlegroups.com \
    --to=tota_ram@india.com \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).