* Elisp function that performs numeric computations
@ 2022-01-19 7:20 fatiparty--- via Users list for the GNU Emacs text editor
[not found] ` <MtlCLWs--3-2@tutanota.com-MtlItBn----2>
2022-01-19 15:31 ` Michael Heerdegen
0 siblings, 2 replies; 19+ messages in thread
From: fatiparty--- via Users list for the GNU Emacs text editor @ 2022-01-19 7:20 UTC (permalink / raw)
To: Help Gnu Emacs
I would like to construct an elisp function that performs numeric computations and outputs the result.
j = rptdepth
w = maxdepth - j
p = w + 1
output = j + ( (depth - maxdepth - 1) mod p )
^ permalink raw reply [flat|nested] 19+ messages in thread
* Elisp function that performs numeric computations
[not found] ` <MtlCLWs--3-2@tutanota.com-MtlItBn----2>
@ 2022-01-19 9:03 ` fatiparty--- via Users list for the GNU Emacs text editor
2022-01-19 10:14 ` tomas
` (2 more replies)
0 siblings, 3 replies; 19+ messages in thread
From: fatiparty--- via Users list for the GNU Emacs text editor @ 2022-01-19 9:03 UTC (permalink / raw)
To: Fatiparty; +Cc: Help Gnu Emacs
Jan 19, 2022, 19:20 by help-gnu-emacs@gnu.org:
>
> I would like to construct an elisp function that performs numeric computations and outputs the result.
>
> j = rptdepth
> w = maxdepth - j
> p = w + 1
>
> output = j + ( (depth - maxdepth - 1) mod p )
>
I have done as follows. But one problem is: How do I use the output in another elisp function?
(defun test (depth maxdepth rptdepth)
"Compute depth to use."
(interactive)
(let* ( (j rptdepth)
(w (- maxdepth j))
(p (+ w 1))
(r (mod (- depth maxdepth 1) p) )
(o (+ j r)) )
(message "usedepth: %d" o) ))
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Elisp function that performs numeric computations
2022-01-19 9:03 ` fatiparty--- via Users list for the GNU Emacs text editor
@ 2022-01-19 10:14 ` tomas
2022-01-19 11:29 ` Marcin Borkowski
2022-01-19 10:24 ` Manuel Giraud
2022-01-19 17:31 ` Eduardo Ochs
2 siblings, 1 reply; 19+ messages in thread
From: tomas @ 2022-01-19 10:14 UTC (permalink / raw)
To: help-gnu-emacs
[-- Attachment #1: Type: text/plain, Size: 3133 bytes --]
On Wed, Jan 19, 2022 at 10:03:28AM +0100, fatiparty--- via Users list for the GNU Emacs text editor wrote:
> Jan 19, 2022, 19:20 by help-gnu-emacs@gnu.org:
>
> >
> > I would like to construct an elisp function that performs numeric computations and outputs the result.
> >
> > j = rptdepth
> > w = maxdepth - j
> > p = w + 1
> >
> > output = j + ( (depth - maxdepth - 1) mod p )
> >
> I have done as follows. But one problem is: How do I use the output in another elisp function?
>
> (defun test (depth maxdepth rptdepth)
> "Compute depth to use."
> (interactive)
>
> (let* ( (j rptdepth)
> (w (- maxdepth j))
> (p (+ w 1))
> (r (mod (- depth maxdepth 1) p) )
> (o (+ j r)) )
>
> (message "usedepth: %d" o) ))
Exactly the same way the other functions you are using in there do it
"minus" (aka "-"), "plus" ("+") "mod" and the others).
I seriously recommend you go through the excellent "Emacs Lisp Intro"
delivered with your documentation.
When you define a function, its "value" (i.e. the result of evaluating
an expression where this function is the operator) is the last
expression evaluated in that function. So, to put a very simple example
(the following function always evaluates to 42);
(defun forty-two ()
42)
That's it.
In your case, see "transformation 1".
(defun test (depth maxdepth rptdepth)
"Compute depth to use."
(interactive)
(let* ( (j rptdepth)
(w (- maxdepth j))
(p (+ w 1))
(r (mod (- depth maxdepth 1) p) )
(o (+ j r)) )
o))
(Note that I just say "o" instead of "message ...": the former says it
"to the program", the latter "to the user".
You then can invoke your function in your program, like so:
(message "the test is: %d" (test 20 22 19))
... the expression (test 20 22 19) evaluating to whatever you programmed
your function to do.
Now one could argue that you can simplify your function's innards a bit:
note that you don't make any use of all those intermediate results (j
and so on). So if there isn't a particular reason to name (or keep)
them, you might do.
j <- rptdepth
w <- (- maxdepth j) == (- maxdepth rptdepth)
p <- (+ w 1) == (+ (- maxdepth rptdepth) 1)
r <- (mod (- depth maxdepth 1) p) ==
(mod (- depth maxdepth 1) (+ (- maxdepth rptdepth)))
o <- (+ j r) ==
(+ rptdepth
(mod (- depth maxdepth 1) (+ (- maxdepth rptdepth) 1)))
...so your function might look like
(defun test (depth maxdepth rptdepth)
"Compute depth to use."
(interactive)
(+ rptdepth
(mod (- depth maxdepth 1)
(+ (- maxdepth rptdepth) 1))))
Pick your choice. Further embellishments possible if you remember that
(+ x 1) can be abbreviated as (1+ x) and likewise (- x 1) as (1- x).
Again: go through "Emacs Lisp Intro". I have the strong impression that
you haven't yet a working model of how Lisp ticks.
Cheers
-- t
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Elisp function that performs numeric computations
2022-01-19 9:03 ` fatiparty--- via Users list for the GNU Emacs text editor
2022-01-19 10:14 ` tomas
@ 2022-01-19 10:24 ` Manuel Giraud
2022-01-19 17:31 ` Eduardo Ochs
2 siblings, 0 replies; 19+ messages in thread
From: Manuel Giraud @ 2022-01-19 10:24 UTC (permalink / raw)
To: fatiparty--- via Users list for the GNU Emacs text editor; +Cc: Fatiparty
fatiparty--- via Users list for the GNU Emacs text editor
<help-gnu-emacs@gnu.org> writes:
> Jan 19, 2022, 19:20 by help-gnu-emacs@gnu.org:
>
>>
>> I would like to construct an elisp function that performs numeric
>> computations and outputs the result.
>>
>> j = rptdepth
>> w = maxdepth - j
>> p = w + 1
>>
>> output = j + ( (depth - maxdepth - 1) mod p )
>>
> I have done as follows. But one problem is: How do I use the output
> in another elisp function?
>
> (defun test (depth maxdepth rptdepth)
> "Compute depth to use."
> (interactive)
>
> (let* ( (j rptdepth)
> (w (- maxdepth j))
> (p (+ w 1))
> (r (mod (- depth maxdepth 1) p) )
> (o (+ j r)) )
>
> (message "usedepth: %d" o) ))
Hi,
A `let' form returns the value of the last expression of its body. In
your function, it is "(message…)" which returns the string of the
message. If you want your function to return `o' just append it as the
last expression:
(defun test (depth maxdepth rptdepth)
"Compute depth to use."
(interactive)
(let* ( (j rptdepth)
(w (- maxdepth j))
(p (+ w 1))
(r (mod (- depth maxdepth 1) p) )
(o (+ j r)))
(message "usedepth: %d" o)
o))
Then, you can use `test' directly:
(* (test 8 1000 9) (test 8 1000 9))
--
Manuel Giraud
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Elisp function that performs numeric computations
2022-01-19 10:14 ` tomas
@ 2022-01-19 11:29 ` Marcin Borkowski
2022-01-19 22:52 ` fatiparty--- via Users list for the GNU Emacs text editor
[not found] ` <MtoXj5p--3-2@tutanota.com-MtoXrZH----2>
0 siblings, 2 replies; 19+ messages in thread
From: Marcin Borkowski @ 2022-01-19 11:29 UTC (permalink / raw)
To: tomas; +Cc: help-gnu-emacs
On 2022-01-19, at 11:14, tomas@tuxteam.de wrote:
> On Wed, Jan 19, 2022 at 10:03:28AM +0100, fatiparty--- via Users list for the GNU Emacs text editor wrote:
>> Jan 19, 2022, 19:20 by help-gnu-emacs@gnu.org:
>>
>> >
>> > I would like to construct an elisp function that performs numeric computations and outputs the result.
>> >
>> > j = rptdepth
>> > w = maxdepth - j
>> > p = w + 1
>> >
>> > output = j + ( (depth - maxdepth - 1) mod p )
>> >
>> I have done as follows. But one problem is: How do I use the output in another elisp function?
>>
>> (defun test (depth maxdepth rptdepth)
>> "Compute depth to use."
>> (interactive)
>>
>> (let* ( (j rptdepth)
>> (w (- maxdepth j))
>> (p (+ w 1))
>> (r (mod (- depth maxdepth 1) p) )
>> (o (+ j r)) )
>>
>> (message "usedepth: %d" o) ))
>
> Exactly the same way the other functions you are using in there do it
> "minus" (aka "-"), "plus" ("+") "mod" and the others).
>
> I seriously recommend you go through the excellent "Emacs Lisp Intro"
> delivered with your documentation.
>
> When you define a function, its "value" (i.e. the result of evaluating
> an expression where this function is the operator) is the last
> expression evaluated in that function. So, to put a very simple example
> (the following function always evaluates to 42);
>
> (defun forty-two ()
> 42)
>
> That's it.
>
> In your case, see "transformation 1".
>
> (defun test (depth maxdepth rptdepth)
> "Compute depth to use."
> (interactive)
>
> (let* ( (j rptdepth)
> (w (- maxdepth j))
> (p (+ w 1))
> (r (mod (- depth maxdepth 1) p) )
> (o (+ j r)) )
> o))
>
> (Note that I just say "o" instead of "message ...": the former says it
> "to the program", the latter "to the user".
>
> You then can invoke your function in your program, like so:
>
> (message "the test is: %d" (test 20 22 19))
>
> ... the expression (test 20 22 19) evaluating to whatever you programmed
> your function to do.
Also, once you are comfortable with the basic building blocks of Elisp,
you'll be able to write a function which returns a value when called
from Elisp and prints it (with `message') when called interactively.
(See https://www.gnu.org/software/emacs/manual/html_node/elisp/Distinguish-Interactive.html)
Best,
--
Marcin Borkowski
http://mbork.pl
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Elisp function that performs numeric computations
2022-01-19 7:20 Elisp function that performs numeric computations fatiparty--- via Users list for the GNU Emacs text editor
[not found] ` <MtlCLWs--3-2@tutanota.com-MtlItBn----2>
@ 2022-01-19 15:31 ` Michael Heerdegen
2022-01-19 18:41 ` H. Dieter Wilhelm
1 sibling, 1 reply; 19+ messages in thread
From: Michael Heerdegen @ 2022-01-19 15:31 UTC (permalink / raw)
To: help-gnu-emacs
fatiparty--- via Users list for the GNU Emacs text editor
<help-gnu-emacs@gnu.org> writes:
> I would like to construct an elisp function that performs numeric
> computations and outputs the result.
Unless this is just for learning: have a look at M-x quick-calc.
Requires to specify the input at a prompt. But it offers much
more than Elisp's mathematical functions.
Michael.
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Elisp function that performs numeric computations
2022-01-19 9:03 ` fatiparty--- via Users list for the GNU Emacs text editor
2022-01-19 10:14 ` tomas
2022-01-19 10:24 ` Manuel Giraud
@ 2022-01-19 17:31 ` Eduardo Ochs
2 siblings, 0 replies; 19+ messages in thread
From: Eduardo Ochs @ 2022-01-19 17:31 UTC (permalink / raw)
To: fatiparty; +Cc: Help Gnu Emacs
On Wed, 19 Jan 2022 at 06:18, fatiparty--- via Users list for the GNU Emacs
text editor <help-gnu-emacs@gnu.org> wrote:
> I have done as follows. But one problem is: How do I use the output in
> another elisp function?
>
>
Hi Fatiparty,
the easiest way to test small elisp snippets is to run them by typing
C-e C-x C-e on the last line of the snippet... the C-e will move to
the end of the line, and the C-x C-e will then execute the "sexp
before point" and show the result in the echo area. This is explained
here:
(info "(emacs)Lisp Eval")
http://www.gnu.org/software/emacs/manual/html_node/emacs/Lisp-Eval.html
Try this on these sexps:
(* 2 3)
(* 4 5)
(+ (* 2 3) (* 4 5))
(progn (* 2 3) (* 4 5) (* 6 7))
(prog1 (* 2 3) (* 4 5) (* 6 7))
(prog2 (* 2 3) (* 4 5) (* 6 7))
If you like this way of running sexps then you should take a look at
this tutorial, that is all written in this style - "run each of these
sexps with `C-e C-x C-e' and try to understand what they do"...
http://angg.twu.net/eev-intros/find-elisp-intro.html
Note that the introduction of that tutorial says:
Different people prefer different kinds of tutorials.
Many people love the eintr, but I don't: (find-node "(eintr)Top")
This tutorial here is what I would have liked to have had access to
when I started learning Emacs Lisp.
Cheers,
Eduardo Ochs
http://angg.twu.net/#eev
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Elisp function that performs numeric computations
2022-01-19 15:31 ` Michael Heerdegen
@ 2022-01-19 18:41 ` H. Dieter Wilhelm
0 siblings, 0 replies; 19+ messages in thread
From: H. Dieter Wilhelm @ 2022-01-19 18:41 UTC (permalink / raw)
To: Michael Heerdegen; +Cc: help-gnu-emacs
Michael Heerdegen <michael_heerdegen@web.de> writes:
> fatiparty--- via Users list for the GNU Emacs text editor
> <help-gnu-emacs@gnu.org> writes:
>
>> I would like to construct an elisp function that performs numeric
>> computations and outputs the result.
>
> Unless this is just for learning: have a look at M-x quick-calc.
> Requires to specify the input at a prompt. But it offers much
> more than Elisp's mathematical functions.
Yeah, Calc is one of the killer features of Emacs.
https://www.gnu.org/software/emacs/refcards/pdf/calccard.pdf
Dieter
--
Best wishes
H. Dieter Wilhelm
Zwingenberg, Germany
^ permalink raw reply [flat|nested] 19+ messages in thread
* Elisp function that performs numeric computations
2022-01-19 11:29 ` Marcin Borkowski
@ 2022-01-19 22:52 ` fatiparty--- via Users list for the GNU Emacs text editor
2022-01-20 22:53 ` Sergey Organov
[not found] ` <MtoXj5p--3-2@tutanota.com-MtoXrZH----2>
1 sibling, 1 reply; 19+ messages in thread
From: fatiparty--- via Users list for the GNU Emacs text editor @ 2022-01-19 22:52 UTC (permalink / raw)
To: Marcin Borkowski; +Cc: Tomas, Help Gnu Emacs
Jan 19, 2022, 23:29 by mbork@mbork.pl:
>
> (defun test (depth maxdepth rptdepth)
>
>> "Compute depth to use."
>> (interactive)
>>
>> (let* ( (j rptdepth)
>> (w (- maxdepth j))
>> (p (+ w 1))
>> (r (mod (- depth maxdepth 1) p) )
>> (o (+ j r)) )
>> o))
>>
I would like to adapt the function a little bit more. If depth <= maxdepth
I want to set o=depth instead of performing the computation shown for the
variable o.
^ permalink raw reply [flat|nested] 19+ messages in thread
* Elisp function that performs numeric computations
[not found] ` <MtoXj5p--3-2@tutanota.com-MtoXrZH----2>
@ 2022-01-20 18:17 ` fatiparty--- via Users list for the GNU Emacs text editor
0 siblings, 0 replies; 19+ messages in thread
From: fatiparty--- via Users list for the GNU Emacs text editor @ 2022-01-20 18:17 UTC (permalink / raw)
To: Fatiparty; +Cc: Marcin Borkowski, Tomas, Help Gnu Emacs
Jan 20, 2022, 10:52 by help-gnu-emacs@gnu.org:
> Jan 19, 2022, 23:29 by mbork@mbork.pl:
>
>>
>> (defun test (depth maxdepth rptdepth)
>>
>>> "Compute depth to use."
>>> (interactive)
>>>
>>> (let* ( (j rptdepth)
>>> (w (- maxdepth j))
>>> (p (+ w 1))
>>> (r (mod (- depth maxdepth 1) p) )
>>> (o (+ j r)) )
>>> o))
>>>
> I would like to adapt the function a little bit more. If depth <= maxdepth
> I want to set o=depth instead of performing the computation shown for the
> variable o.
>
> I would like to use an if statement to set o to depth. The current computation will
> go with the else statement. How does one go about using the let* construct in the
> else part of the conditional. Would I need to use a progn for this?
>
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Elisp function that performs numeric computations
2022-01-19 22:52 ` fatiparty--- via Users list for the GNU Emacs text editor
@ 2022-01-20 22:53 ` Sergey Organov
2022-01-21 8:23 ` fatiparty--- via Users list for the GNU Emacs text editor
2022-01-21 9:04 ` fatiparty--- via Users list for the GNU Emacs text editor
0 siblings, 2 replies; 19+ messages in thread
From: Sergey Organov @ 2022-01-20 22:53 UTC (permalink / raw)
To: help-gnu-emacs
fatiparty--- via Users list for the GNU Emacs text editor
<help-gnu-emacs@gnu.org> writes:
> Jan 19, 2022, 23:29 by mbork@mbork.pl:
>
>>
>> (defun test (depth maxdepth rptdepth)
>>
>>> "Compute depth to use."
>>> (interactive)
>>>
>>> (let* ( (j rptdepth)
>>> (w (- maxdepth j))
>>> (p (+ w 1))
>>> (r (mod (- depth maxdepth 1) p) )
>>> (o (+ j r)) )
>>> o))
>>>
> I would like to adapt the function a little bit more. If depth <= maxdepth
> I want to set o=depth instead of performing the computation shown for the
> variable o.
Did I get it right, I wonder?
(defun test (depth maxdepth rptdepth)
(if (<= depth maxdepth)
depth
(+ rptdepth
(mod (- depth maxdepth 1)
(- maxdepth rptdepth -1)))))
Is it how true (E)Lisp'er would write it?
-- Sergey Organov
^ permalink raw reply [flat|nested] 19+ messages in thread
* Elisp function that performs numeric computations
2022-01-20 22:53 ` Sergey Organov
@ 2022-01-21 8:23 ` fatiparty--- via Users list for the GNU Emacs text editor
2022-01-21 11:39 ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-01-21 9:04 ` fatiparty--- via Users list for the GNU Emacs text editor
1 sibling, 1 reply; 19+ messages in thread
From: fatiparty--- via Users list for the GNU Emacs text editor @ 2022-01-21 8:23 UTC (permalink / raw)
To: Sergey Organov; +Cc: Help Gnu Emacs
Jan 21, 2022, 10:53 by sorganov@gmail.com:
> fatiparty--- via Users list for the GNU Emacs text editor
> <help-gnu-emacs@gnu.org> writes:
>
>> Jan 19, 2022, 23:29 by mbork@mbork.pl:
>>
>>>
>>> (defun test (depth maxdepth rptdepth)
>>>
>>>> "Compute depth to use."
>>>> (interactive)
>>>>
>>>> (let* ( (j rptdepth)
>>>> (w (- maxdepth j))
>>>> (p (+ w 1))
>>>> (r (mod (- depth maxdepth 1) p) )
>>>> (o (+ j r)) )
>>>> o))
>>>>
>> I would like to adapt the function a little bit more. If depth <= maxdepth
>> I want to set o=depth instead of performing the computation shown for the
>> variable o.
>>
>
> Did I get it right, I wonder?
>
> (defun test (depth maxdepth rptdepth)
> (if (<= depth maxdepth)
> depth
> (+ rptdepth
> (mod (- depth maxdepth 1)
> (- maxdepth rptdepth -1)))))
>
> Is it how true (E)Lisp'er would write it?
>
> -- Sergey Organov
>
What you have done is good. But although you have got to a simple solution, I want
to code the more complicated solution for the case where let* is involved (within which
local variables are defined).
^ permalink raw reply [flat|nested] 19+ messages in thread
* Elisp function that performs numeric computations
2022-01-20 22:53 ` Sergey Organov
2022-01-21 8:23 ` fatiparty--- via Users list for the GNU Emacs text editor
@ 2022-01-21 9:04 ` fatiparty--- via Users list for the GNU Emacs text editor
2022-01-21 11:51 ` Emanuel Berg via Users list for the GNU Emacs text editor
1 sibling, 1 reply; 19+ messages in thread
From: fatiparty--- via Users list for the GNU Emacs text editor @ 2022-01-21 9:04 UTC (permalink / raw)
To: Sergey Organov; +Cc: Help Gnu Emacs
Jan 21, 2022, 10:53 by sorganov@gmail.com:
> fatiparty--- via Users list for the GNU Emacs text editor
> <help-gnu-emacs@gnu.org> writes:
>
>> Jan 19, 2022, 23:29 by mbork@mbork.pl:
>>
>>>
>>> (defun test (depth maxdepth rptdepth)
>>>
>>>> "Compute depth to use."
>>>> (interactive)
>>>>
>>>> (let* ( (j rptdepth)
>>>> (w (- maxdepth j))
>>>> (p (+ w 1))
>>>> (r (mod (- depth maxdepth 1) p) )
>>>> (o (+ j r)) )
>>>> o))
>>>>
>> I would like to adapt the function a little bit more. If depth <= maxdepth
>> I want to set o=depth instead of performing the computation shown for the
>> variable o.
>>
>
> Did I get it right, I wonder?
>
> (defun test (depth maxdepth rptdepth)
> (if (<= depth maxdepth)
> depth
> (+ rptdepth
> (mod (- depth maxdepth 1)
> (- maxdepth rptdepth -1)))))
>
> Is it how true (E)Lisp'er would write it?
> -- Sergey Organov
>
I have done as follows, which seems to be working correctly.
(defun test (dcur dmax drpt)
"Compute brace depth used for brace colouring."
(interactive)
(if (<= dcur dmax)
(let ( (n dcur) )
(message "dcur <= dmax | Typeface: %d" n)
n)
(let* ( (j drpt)
(w (- dmax j))
(p (+ w 1))
(r (mod (- dcur dmax 1) p) )
(n (+ j r)) )
(message "dcur > dmax | Typeface: %d" n)
n) ))
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Elisp function that performs numeric computations
2022-01-21 8:23 ` fatiparty--- via Users list for the GNU Emacs text editor
@ 2022-01-21 11:39 ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-01-21 13:03 ` Sergey Organov
0 siblings, 1 reply; 19+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2022-01-21 11:39 UTC (permalink / raw)
To: help-gnu-emacs
fatiparty--- via Users list for the GNU Emacs text editor wrote:
>>>>> "Compute depth to use."
>>>>> (interactive)
>>>>>
>>>>> (let* ( (j rptdepth)
>>>>> (w (- maxdepth j))
>>>>> (p (+ w 1))
>>>>> (r (mod (- depth maxdepth 1) p) )
>>>>> (o (+ j r)) )
>>>>> o))
>>>>>
>>>
>>> I would like to adapt the function a little bit more. If
>>> depth <= maxdepth I want to set o=depth instead of
>>> performing the computation shown for the variable o.
>>>
>>
>> Did I get it right, I wonder?
>>
>> (defun test (depth maxdepth rptdepth)
>> (if (<= depth maxdepth)
>> depth
>> (+ rptdepth
>> (mod (- depth maxdepth 1)
>> (- maxdepth rptdepth -1)))))
>>
>> Is it how true (E)Lisp'er would write it?
>>
>
> What you have done is good. But although you have got to
> a simple solution, I want to code the more complicated
> solution for the case where let* is involved (within which
> local variables are defined).
The reason there is no `let' (or `let*') in his code is
because there is no repitition of computation patterns ...
As for "Is it how true (E)Lisp'er would write it?" I'd write
it, whatever it is, like this:
(defun organov (dep top rep)
(if (<= dep top)
dep
(+ rep
(mod (1- (- dep top))
(1+ (- top rep)) ))))
Elispers at work!
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Elisp function that performs numeric computations
2022-01-21 9:04 ` fatiparty--- via Users list for the GNU Emacs text editor
@ 2022-01-21 11:51 ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-01-21 12:25 ` fatiparty--- via Users list for the GNU Emacs text editor
0 siblings, 1 reply; 19+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2022-01-21 11:51 UTC (permalink / raw)
To: help-gnu-emacs
fatiparty--- via Users list for the GNU Emacs text editor wrote:
> (defun test (dcur dmax drpt)
All programming: Name the function something that etc etc.
Lisp: We don't name formal parameters the assembly language or
C style ... give them short, but if possible complete names
that are easy to read and write. When in doubt, give them
a complete name that communicates what its purpose or
intended use.
> "Compute brace depth used for brace colouring."
Doc string should have the formal parameter's names in BOLD in
the order they come in the the function definition ...
> (interactive)
Assign the formal parameters with argument values
(interactive "ndepth: \nntop: \nnrepeat: ")
^ eval me
Use English in the prompt string, if the words feel to long
see if they can be shortened in a natural way (here, e.g. dep,
top, and rep) - the reason one avoids "max" is it also appears
in as the function `max' ...
> (let ( (n dcur) )
> (message "dcur <= dmax | Typeface: %d" n)
> n)
If there is no computation, renaming it ... why do you
do that?
You use it like this:
(let*((side 2)
(square (expt side 2) )) ...
;; use square here
)
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 19+ messages in thread
* Elisp function that performs numeric computations
2022-01-21 11:51 ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2022-01-21 12:25 ` fatiparty--- via Users list for the GNU Emacs text editor
0 siblings, 0 replies; 19+ messages in thread
From: fatiparty--- via Users list for the GNU Emacs text editor @ 2022-01-21 12:25 UTC (permalink / raw)
To: Emanuel Berg; +Cc: Help Gnu Emacs
Jan 21, 2022, 23:51 by help-gnu-emacs@gnu.org:
> fatiparty--- via Users list for the GNU Emacs text editor wrote:
>
>> (defun test (dcur dmax drpt)
>>
>
> All programming: Name the function something that etc etc.
>
> Lisp: We don't name formal parameters the assembly language or
> C style ... give them short, but if possible complete names
> that are easy to read and write. When in doubt, give them
> a complete name that communicates what its purpose or
> intended use.
>
>> "Compute brace depth used for brace colouring."
>>
>
> Doc string should have the formal parameter's names in BOLD in
> the order they come in the the function definition ...
>
>> (interactive)
>>
>
> Assign the formal parameters with argument values
>
> (interactive "ndepth: \nntop: \nnrepeat: ")
> ^ eval me
>
> Use English in the prompt string, if the words feel to long
> see if they can be shortened in a natural way (here, e.g. dep,
> top, and rep) - the reason one avoids "max" is it also appears
> in as the function `max' ...
>
>> (let ( (n dcur) )
>> (message "dcur <= dmax | Typeface: %d" n)
>> n)
>>
>
> If there is no computation, renaming it ... why do you
> do that?
>
I did that because I use n an the output (either it is dcur [current depth] or it is from the
latter computation).
But as you say, I could just do
(if (<= dcur dmax) dcur
(let* ( (j drpt) ...
> You use it like this:
>
> (let*((side 2)
> (square (expt side 2) )) ...
> ;; use square here
> )
>
> --
> underground experts united
> https://dataswamp.org/~incal
>
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Elisp function that performs numeric computations
2022-01-21 11:39 ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2022-01-21 13:03 ` Sergey Organov
2022-01-21 15:32 ` Emanuel Berg via Users list for the GNU Emacs text editor
0 siblings, 1 reply; 19+ messages in thread
From: Sergey Organov @ 2022-01-21 13:03 UTC (permalink / raw)
To: help-gnu-emacs
Emanuel Berg via Users list for the GNU Emacs text editor
<help-gnu-emacs@gnu.org> writes:
> fatiparty--- via Users list for the GNU Emacs text editor wrote:
>
>>>>>> "Compute depth to use."
>>>>>> (interactive)
>>>>>>
>>>>>> (let* ( (j rptdepth)
>>>>>> (w (- maxdepth j))
>>>>>> (p (+ w 1))
>>>>>> (r (mod (- depth maxdepth 1) p) )
>>>>>> (o (+ j r)) )
>>>>>> o))
>>>>>>
>>>>
>>>> I would like to adapt the function a little bit more. If
>>>> depth <= maxdepth I want to set o=depth instead of
>>>> performing the computation shown for the variable o.
>>>>
>>>
>>> Did I get it right, I wonder?
>>>
>>> (defun test (depth maxdepth rptdepth)
>>> (if (<= depth maxdepth)
>>> depth
>>> (+ rptdepth
>>> (mod (- depth maxdepth 1)
>>> (- maxdepth rptdepth -1)))))
>>>
>>> Is it how true (E)Lisp'er would write it?
>>>
>>
>> What you have done is good. But although you have got to
>> a simple solution, I want to code the more complicated
>> solution for the case where let* is involved (within which
>> local variables are defined).
>
> The reason there is no `let' (or `let*') in his code is
> because there is no repitition of computation patterns ...
>
> As for "Is it how true (E)Lisp'er would write it?" I'd write
> it, whatever it is, like this:
>
> (defun organov (dep top rep)
> (if (<= dep top)
> dep
> (+ rep
> (mod (1- (- dep top))
> (1+ (- top rep)) ))))
Nice, thanks! Didn't know me could be cut to such a brief definition
though :)
-- Sergey Organov
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Elisp function that performs numeric computations
2022-01-21 13:03 ` Sergey Organov
@ 2022-01-21 15:32 ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-01-21 17:13 ` Sergey Organov
0 siblings, 1 reply; 19+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2022-01-21 15:32 UTC (permalink / raw)
To: help-gnu-emacs
Sergey Organov wrote:
>> (defun organov (dep top rep)
>> (if (<= dep top)
>> dep
>> (+ rep
>> (mod (1- (- dep top))
>> (1+ (- top rep)) ))))
>
> Nice, thanks! Didn't know me could be cut to such a brief
> definition though :)
Heh, but here it actually becomes longer than yours!
But more clear, was the thought.
So if that's indeed so, that means one should do it, since the
penalty for being long (or, if you'd like, the gain from being
short) is approaching zero to the point (but not to the acutal
point actually) where it is infinitely small :)
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Elisp function that performs numeric computations
2022-01-21 15:32 ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2022-01-21 17:13 ` Sergey Organov
0 siblings, 0 replies; 19+ messages in thread
From: Sergey Organov @ 2022-01-21 17:13 UTC (permalink / raw)
To: help-gnu-emacs
Emanuel Berg via Users list for the GNU Emacs text editor
<help-gnu-emacs@gnu.org> writes:
> Sergey Organov wrote:
>
>>> (defun organov (dep top rep)
>>> (if (<= dep top)
>>> dep
>>> (+ rep
>>> (mod (1- (- dep top))
>>> (1+ (- top rep)) ))))
>>
>> Nice, thanks! Didn't know me could be cut to such a brief
>> definition though :)
>
> Heh, but here it actually becomes longer than yours!
Heh, but mine has not been called "organov", so it didn't cut *me*, and
then yours did, and now I'm sitting here feeling being much shorter than
I was only yesterday :)
-- Sergey Organov
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2022-01-21 17:13 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-19 7:20 Elisp function that performs numeric computations fatiparty--- via Users list for the GNU Emacs text editor
[not found] ` <MtlCLWs--3-2@tutanota.com-MtlItBn----2>
2022-01-19 9:03 ` fatiparty--- via Users list for the GNU Emacs text editor
2022-01-19 10:14 ` tomas
2022-01-19 11:29 ` Marcin Borkowski
2022-01-19 22:52 ` fatiparty--- via Users list for the GNU Emacs text editor
2022-01-20 22:53 ` Sergey Organov
2022-01-21 8:23 ` fatiparty--- via Users list for the GNU Emacs text editor
2022-01-21 11:39 ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-01-21 13:03 ` Sergey Organov
2022-01-21 15:32 ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-01-21 17:13 ` Sergey Organov
2022-01-21 9:04 ` fatiparty--- via Users list for the GNU Emacs text editor
2022-01-21 11:51 ` Emanuel Berg via Users list for the GNU Emacs text editor
2022-01-21 12:25 ` fatiparty--- via Users list for the GNU Emacs text editor
[not found] ` <MtoXj5p--3-2@tutanota.com-MtoXrZH----2>
2022-01-20 18:17 ` fatiparty--- via Users list for the GNU Emacs text editor
2022-01-19 10:24 ` Manuel Giraud
2022-01-19 17:31 ` Eduardo Ochs
2022-01-19 15:31 ` Michael Heerdegen
2022-01-19 18:41 ` H. Dieter Wilhelm
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).