unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* ELisp - Making a list from a function returning a number
@ 2020-12-17 11:42 steve-humphreys
  2020-12-18  2:26 ` steve-humphreys
  0 siblings, 1 reply; 9+ messages in thread
From: steve-humphreys @ 2020-12-17 11:42 UTC (permalink / raw)
  To: Help Gnu Emacs


I have written a function to return time as a number so I can set the temporal grid
in org-agenda.

I was previously using number-sequence until someone fount a problem.  Now I have timfutur to
give me the next time (time interval "tsk" after time "tim")

(tim (number-sequence tstr tend tskp))

So what I have remaining to do is to make a list of numbers representing the times when the
agenda grids are displayed.


(defun timfutur (tim tsk)

   (let* ( (thr (/ tim 100))
           (tmn (- tim (* thr 100)))

           (tinc_mn (+ tmn tsk))
           (tinc_hr (/ (+ tmn tsk) 60))
           (tinc_mn (- tinc_mn (* tinc_hr 60)))

           (thr_futur (* (+ thr tinc_hr) 100))
           (tmn_futur tinc_mn)
           (tim_out (+ thr_futur tmn_futur)) )
      ;; --- body of let ----
      tim_out ))                  ;  function returns last form



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ELisp - Making a list from a function returning a number
  2020-12-17 11:42 ELisp - Making a list from a function returning a number steve-humphreys
@ 2020-12-18  2:26 ` steve-humphreys
  2020-12-18  3:01   ` steve-humphreys
  0 siblings, 1 reply; 9+ messages in thread
From: steve-humphreys @ 2020-12-18  2:26 UTC (permalink / raw)
  To: steve-humphreys; +Cc: Help Gnu Emacs

I have now started constructing my function but get many problems.

(defun timgrid ()

   (setq tstr 800)
   (setq tend 1300)
   (setq tpd 34)

   (setq i 0)
   (setq tim tstr)
   (setq tlist '(tim))
   (dotimes (i 4)
      (setq tfr (timfutur (tim tpd)))
      (setq tim tfr)
      (setq tlist (append (tlist) (tim))) ))


> Sent: Thursday, December 17, 2020 at 12:42 PM
> From: steve-humphreys@gmx.com
> To: "Help Gnu Emacs" <help-gnu-emacs@gnu.org>
> Subject: ELisp - Making a list from a function returning a number
>
>
> I have written a function to return time as a number so I can set the temporal grid
> in org-agenda.
>
> I was previously using number-sequence until someone fount a problem.  Now I have timfutur to
> give me the next time (time interval "tsk" after time "tim")
>
> (tim (number-sequence tstr tend tskp))
>
> So what I have remaining to do is to make a list of numbers representing the times when the
> agenda grids are displayed.
>
>
> (defun timfutur (tim tsk)
>
>    (let* ( (thr (/ tim 100))
>            (tmn (- tim (* thr 100)))
>
>            (tinc_mn (+ tmn tsk))
>            (tinc_hr (/ (+ tmn tsk) 60))
>            (tinc_mn (- tinc_mn (* tinc_hr 60)))
>
>            (thr_futur (* (+ thr tinc_hr) 100))
>            (tmn_futur tinc_mn)
>            (tim_out (+ thr_futur tmn_futur)) )
>       ;; --- body of let ----
>       tim_out ))                  ;  function returns last form
>
>



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ELisp - Making a list from a function returning a number
  2020-12-18  2:26 ` steve-humphreys
@ 2020-12-18  3:01   ` steve-humphreys
  2020-12-18 14:43     ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 1 reply; 9+ messages in thread
From: steve-humphreys @ 2020-12-18  3:01 UTC (permalink / raw)
  To: steve-humphreys; +Cc: Help Gnu Emacs

This is my new function

(defun timgrid ()

   (let* ( (tstr 800)
           (tend 1300)
           (tpd 34)
           (i 0)
           (tim tstr)
           tim tfr )
      ;; ----- body of let -----
      (dotimes (i 4)
         (message "tim tpd: %d %d" tim tpd)
         (setq tfr (timfutur tim tpd))
         (message "tim: %d" tim)
         ;;(setq tlist (append 'tlist (list tim)))
         (setq tim tfr)) ))


> Sent: Friday, December 18, 2020 at 3:26 AM
> From: steve-humphreys@gmx.com
> To: steve-humphreys@gmx.com
> Cc: "Help Gnu Emacs" <help-gnu-emacs@gnu.org>
> Subject: Re: ELisp - Making a list from a function returning a number
>
> I have now started constructing my function but get many problems.
>
> (defun timgrid ()
>
>    (setq tstr 800)
>    (setq tend 1300)
>    (setq tpd 34)
>
>    (setq i 0)
>    (setq tim tstr)
>    (setq tlist '(tim))
>    (dotimes (i 4)
>       (setq tfr (timfutur (tim tpd)))
>       (setq tim tfr)
>       (setq tlist (append (tlist) (tim))) ))
>
>
> > Sent: Thursday, December 17, 2020 at 12:42 PM
> > From: steve-humphreys@gmx.com
> > To: "Help Gnu Emacs" <help-gnu-emacs@gnu.org>
> > Subject: ELisp - Making a list from a function returning a number
> >
> >
> > I have written a function to return time as a number so I can set the temporal grid
> > in org-agenda.
> >
> > I was previously using number-sequence until someone fount a problem.  Now I have timfutur to
> > give me the next time (time interval "tsk" after time "tim")
> >
> > (tim (number-sequence tstr tend tskp))
> >
> > So what I have remaining to do is to make a list of numbers representing the times when the
> > agenda grids are displayed.
> >
> >
> > (defun timfutur (tim tsk)
> >
> >    (let* ( (thr (/ tim 100))
> >            (tmn (- tim (* thr 100)))
> >
> >            (tinc_mn (+ tmn tsk))
> >            (tinc_hr (/ (+ tmn tsk) 60))
> >            (tinc_mn (- tinc_mn (* tinc_hr 60)))
> >
> >            (thr_futur (* (+ thr tinc_hr) 100))
> >            (tmn_futur tinc_mn)
> >            (tim_out (+ thr_futur tmn_futur)) )
> >       ;; --- body of let ----
> >       tim_out ))                  ;  function returns last form
> >
> >
>



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ELisp - Making a list from a function returning a number
  2020-12-18  3:01   ` steve-humphreys
@ 2020-12-18 14:43     ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-18 17:53       ` Jean Louis
  0 siblings, 1 reply; 9+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-18 14:43 UTC (permalink / raw)
  To: help-gnu-emacs

steve-humphreys wrote:

> This is my new function
>
> (defun timgrid ()
>
>    (let* ( (tstr 800)
>            (tend 1300)
>            (tpd 34)
>            (i 0)
>            (tim tstr)
>            tim tfr )
>       ;; ----- body of let -----
>       (dotimes (i 4)
>          (message "tim tpd: %d %d" tim tpd)
>          (setq tfr (timfutur tim tpd))
>          (message "tim: %d" tim)
>          ;;(setq tlist (append 'tlist (list tim)))
>          (setq tim tfr)) ))

Please, 

1. use more understandable language. this is Lisp, not
   assembly language...

2. remove blank lines and commented out lines

3. don't use comments that do not add any information (e.g.,
   "body of let" - but that is already plain and true, by
   definition)

4. use the normal indentation space for Elisp, in `elisp-mode'
   two spaces

5. again, don't use `setq' in function bodies when there is no
   need, you already have the vars in let*, do all computation
   there (add more vars if necessary, for clarity, even)

I'm not saying this to be disrespectful, instead trust me that
it will bring your game up A LOT and also people will be more
likely to communicate with you - more, but also better since
you help not only yourself but also anyone reading and
possibly using your code...

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ELisp - Making a list from a function returning a number
  2020-12-18 14:43     ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-18 17:53       ` Jean Louis
  2020-12-20  5:03         ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 1 reply; 9+ messages in thread
From: Jean Louis @ 2020-12-18 17:53 UTC (permalink / raw)
  To: help-gnu-emacs

* Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2020-12-18 17:45]:
> steve-humphreys wrote:
> 
> > This is my new function
> >
> > (defun timgrid ()
> >
> >    (let* ( (tstr 800)
> >            (tend 1300)
> >            (tpd 34)
> >            (i 0)
> >            (tim tstr)
> >            tim tfr )
> >       ;; ----- body of let -----
> >       (dotimes (i 4)
> >          (message "tim tpd: %d %d" tim tpd)
> >          (setq tfr (timfutur tim tpd))
> >          (message "tim: %d" tim)
> >          ;;(setq tlist (append 'tlist (list tim)))
> >          (setq tim tfr)) ))
> 
> Please, 
> 
> 1. use more understandable language. this is Lisp, not
>    assembly language...

No, quite contrary. LISP allows for any paradigm of
programming. Linear programming, etc. It does not matter. I see no
problem there like you see it.

Many of my command line tools in Common Lisp only load other programs
and invoke one let. There are conventions, but first LISP programs was
not written in any of our today's conventions.

I would say that LISP convention is good that variables may be
described easier. Instead of `tstr' one could say `time-start' or
instead `tend' one could freely say `time-end'. Then again I will
sometimes use just a, b, c for variables. 

> 2. remove blank lines and commented out lines

For one's own understanding this may help. Step by step. Learning goes
on gradient.

> 3. don't use comments that do not add any information (e.g.,
>    "body of let" - but that is already plain and true, by
>    definition)

That is what you know on a different gradient. Even more comments
would be required on beginning gradient and this in all programming
languages. Advanced programmers need no comments, they read the
code. I have little difficulties reading scheme code due to little bit
more functional way of programming, but reading Emacs functions is
often terrible for me due to way how they are written. 

> 4. use the normal indentation space for Elisp, in `elisp-mode' two
>    spaces

It may be hard to understand for new Elisp programmer what you mean
here. I do not use nothing, I use elisp-mode and I press TAB or M-q to
indent everything in a region. I would not even know how it should be
indented if I would not be using emacs lisp mode.

> 5. again, don't use `setq' in function bodies when there is no
>    need, you already have the vars in let*, do all computation
>    there (add more vars if necessary, for clarity, even)

Especially in a list within `let' form there is no problem in using
`setq'. In that above example I can fully understand that way of doing
things as it gives clearer picture on what is happening.

First comes inception then shape.




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ELisp - Making a list from a function returning a number
  2020-12-18 17:53       ` Jean Louis
@ 2020-12-20  5:03         ` Emanuel Berg via Users list for the GNU Emacs text editor
  2020-12-20  6:23           ` Jean Louis
  0 siblings, 1 reply; 9+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-20  5:03 UTC (permalink / raw)
  To: help-gnu-emacs

Jean Louis wrote:

> No, quite contrary. LISP allows for any paradigm of
> programming. Linear programming, etc. It does not matter.
> I see no problem there like you see it.

Yes, I'm talking Elisp conventions then...

> Many of my command line tools in Common Lisp only load other
> programs and invoke one let. There are conventions, but
> first LISP programs was not written in any of our
> today's conventions.

Yes, I'm talking the present then...

>> 2. remove blank lines and commented out lines
>
> For one's own understanding this may help. Step by step.
> Learning goes on gradient.

When one posts here, and for one's own karma, it is better to
make it as good as possible, even (especially) when it
doesn't work.

>> 3. don't use comments that do not add any information (e.g.,
>>    "body of let" - but that is already plain and true, by
>>    definition)
>
> That is what you know on a different gradient. Even more comments
> would be required on beginning gradient and this in all programming
> languages. Advanced programmers need no comments, they read the
> code.

One should comment what is unusual, counterintuitive or needs
further explanation. For example something that looks wrong,
but is right. Advanced programmers do this all the time I was
about to say, but luckily this doesn't happen all the time :)

In Elisp one can also add little helpers that can be
evaluated, e.g.

;; (setq latex-mode-hook nil)
(defun latex-mode-hook-f ()
  (set-latex-keys)
  (auto-fill-mode)
  (abbrev-mode)
  (lines) )
(add-hook 'latex-mode-hook #'latex-mode-hook-f)

One can also use comments as headers, this works especially
well since they get another color with font lock, namely the
font-lock-comment-face and
font-lock-comment-delimiter-face faces.

For example:

(let ((the-map gnus-group-mode-map))
  (disable-super-global-keys  the-map)
  (set-close-key              the-map)
  (set-vertical-keys          the-map)
  
  ;; show
  (define-key the-map "f"     #'gnus-group-list-few-groups-sort)
  (define-key the-map "l"     #'gnus-group-list-all-groups-sort)
  
  ;; goto
  (define-key the-map "m"     #'gnus-group-show-mails)
  (define-key the-map "s"     #'gnus-group-show-sent)
  
  ;; group
  (define-key the-map "3"     #'gnus-group-unsubscribe-current-group)
  (define-key the-map "\C-k"  nil) ; disable `gnus-group-kill-group'
  (define-key the-map "A"     #'gnus-group-make-group)
  (define-key the-map "a"     #'gnus-group-post-news-to-group-at-point)
  
  ;; servers
  (define-key the-map "o"     #'gnus-server-open-all-servers)
  (define-key the-map "S"     #'gnus-group-enter-server-mode)
  
  ;; misc
  (define-key the-map "\M-0"  #'gnus-undo)
  (define-key the-map "g"     #'gnus-group-get-new-news-verbose)
  (define-key the-map "u"     #'gnus-score-load-files)
  )

So the use of comments should be put to use sensibly by
beginner and advanced programmers alike...

>> 4. use the normal indentation space for Elisp, in
>>    `elisp-mode' two spaces
>
> It may be hard to understand for new Elisp programmer what
> you mean here. I do not use nothing, I use elisp-mode and
> I press TAB or M-q to indent everything in a region. I would
> not even know how it should be indented if I would not be
> using emacs lisp mode.

OK, well two spaces is the standard and yes auto indentation
is very useful.

>> 5. again, don't use `setq' in function bodies when there is
>>    no need, you already have the vars in let*, do all
>>    computation there (add more vars if necessary, for
>>    clarity, even)
>
> Especially in a list within `let' form there is no problem
> in using `setq'. In that above example I can fully
> understand that way of doing things as it gives clearer
> picture on what is happening.

Yes, there is a problem with `setq' in functions and that is
it will silently create a global variable if one makes a typo,
also it makes the code more unclear, also often it isn't even
needed since one can just as easily do all the computation
using `let'. On is using let anyway so why don't do it
there anyway?

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ELisp - Making a list from a function returning a number
  2020-12-20  5:03         ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2020-12-20  6:23           ` Jean Louis
  2020-12-20  6:30             ` Christopher Dimech
  2020-12-20  7:01             ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 2 replies; 9+ messages in thread
From: Jean Louis @ 2020-12-20  6:23 UTC (permalink / raw)
  To: help-gnu-emacs

* Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2020-12-20 08:04]:
> > For one's own understanding this may help. Step by step.
> > Learning goes on gradient.
> 
> When one posts here, and for one's own karma, it is better to
> make it as good as possible, even (especially) when it
> doesn't work.

It depends of the level of a programmer. When person is trying to
understand basic functions then it would be too steep gradient to ask
person to do more than the basics, when even basics are not explained.

Teaching shall be gradual, it is known from school levels.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ELisp - Making a list from a function returning a number
  2020-12-20  6:23           ` Jean Louis
@ 2020-12-20  6:30             ` Christopher Dimech
  2020-12-20  7:01             ` Emanuel Berg via Users list for the GNU Emacs text editor
  1 sibling, 0 replies; 9+ messages in thread
From: Christopher Dimech @ 2020-12-20  6:30 UTC (permalink / raw)
  To: Jean Louis; +Cc: help-gnu-emacs

> Sent: Sunday, December 20, 2020 at 11:53 AM
> From: "Jean Louis" <bugs@gnu.support>
> To: help-gnu-emacs@gnu.org
> Subject: Re: ELisp - Making a list from a function returning a number
>
> * Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2020-12-20 08:04]:
> > > For one's own understanding this may help. Step by step.
> > > Learning goes on gradient.
> >
> > When one posts here, and for one's own karma, it is better to
> > make it as good as possible, even (especially) when it
> > doesn't work.
>
> It depends of the level of a programmer. When person is trying to
> understand basic functions then it would be too steep gradient to ask
> person to do more than the basics, when even basics are not explained.

One enlightened person indeed.

> Teaching shall be gradual, it is known from school levels.





^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: ELisp - Making a list from a function returning a number
  2020-12-20  6:23           ` Jean Louis
  2020-12-20  6:30             ` Christopher Dimech
@ 2020-12-20  7:01             ` Emanuel Berg via Users list for the GNU Emacs text editor
  1 sibling, 0 replies; 9+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2020-12-20  7:01 UTC (permalink / raw)
  To: help-gnu-emacs

Jean Louis wrote:

>> When one posts here, and for one's own karma, it is better
>> to make it as good as possible, even (especially) when it
>> doesn't work.
>
> It depends of the level of a programmer. [...]

Anyone can remove commented-out and blank lines. Just hit
C-k a couple of times.

-- 
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2020-12-20  7:01 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-12-17 11:42 ELisp - Making a list from a function returning a number steve-humphreys
2020-12-18  2:26 ` steve-humphreys
2020-12-18  3:01   ` steve-humphreys
2020-12-18 14:43     ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-18 17:53       ` Jean Louis
2020-12-20  5:03         ` Emanuel Berg via Users list for the GNU Emacs text editor
2020-12-20  6:23           ` Jean Louis
2020-12-20  6:30             ` Christopher Dimech
2020-12-20  7:01             ` Emanuel Berg via Users list for the GNU Emacs text editor

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).