Hi there, the following org snippet is describing my issue. Thanks in advance, Heiko * TODO post problem report about ob-calc duplicate stack-element issue :LOGBOOK: - State "TODO" from [2020-03-15 Sun 09:19] :END: - I want to use ob-calc to do some "literate calculation" with the purpose to document what I thought at the time I wrote it. - problem: When evaluating the calc snippets the top of stack element is dropped. Because every "begin/end_src calc" block drops the top of stack, one can't reuse the result in following blocks. - although without expecting any effect here is some version information: - emacs version: GNU Emacs 24.4.1 (x86_64-pc-linux-gnu, GTK+ Version 3.14.5) of 2017-09-12 on hullmann, modified by Debian - org-version: 9.2 ** what I'd like to be able Number of cars (PKW) in germany: #+begin_src calc :exports both 45e6 #+end_src #+RESULTS: : 45000000. Yearly mileage in [km/y] #+begin_src calc :exports both 15000 #+end_src #+RESULTS: : 15000 Calculate amount of complete km per year #+begin_src calc :exports both '* #+end_src #+RESULTS: : 675000000000. ** the problem I'm facing and the nearly working work-around - problem: babel removes the resulting top stack element from the stack - tried solution: duplicate the last stack-element on evaluation with "' " (emulate <space> press to duplicate the top element of the stack in calc) - side effect: I normally delete trailing whitespace in my files - so entering "' " is a dangerous workaround - I tried to local-set-key the § key to calc-enter which I thought should enable a command "'§" to duplicate the top of stack. On evaluation this resulted in an error "byte-code: Wrong type argument: number-or-marker-p, nil" Number of cars (PKW) in germany: #+begin_src calc :exports both 45e6 '<space> #+end_src #+RESULTS: : 45000000. Yearly mileage in [km/y] #+begin_src calc :exports both 15000 '<space> #+end_src #+RESULTS: : 15000 Calculate amount of complete km per year #+begin_src calc :exports both '* '<space> #+end_src #+RESULTS: : 675000000000. ** hope for a solution or work around from the community - preferred: Is there a way to leave the top of stack from one snippet to the next (which I don't know)? - alternative: Is there a way to duplicate the top of stack element between begin/end_src calc blocks? - any advice is appreciated.

```
On Sunday, 15 Mar 2020 at 11:46, Heiko Schmidt wrote:
> - I want to use ob-calc to do some "literate calculation" with the
> purpose to document what I thought at the time I wrote it.
I have never managed to get ob-calc to do what I want either so I cannot
help you directly with your query. Instead, I use embedded calc mode,
along these lines:
--8<---------------cut here---------------start------------->8---
Number of cars (PKW) in germany:
ncars := 45000000.
Yearly mileage in [km/y]
mileage := 15000 km/y
Calculate amount of complete km per year
mileage ncars => 675000000000. km / y
--8<---------------cut here---------------end--------------->8---
You have to activate embedded mode. By default, calc will look for
expressions surrounded by empty lines. The := operator assigns values
to variables and the => operator says to show the result here instead of
replacing the expression with the result.
As an aside, calc understands units which is quite nice...
HTH,
eric
--
: Eric S Fraga via Emacs 28.0.50, Org release_9.3.6-412-ge18415
```

```
Several times I made exactly similar experiences with ob-calc as you
mentioned (units, do what I want), nevertheless I decided to be
dependent of orgmode and I'd really appreciate to use ob-calc for
"literate calculation".
"Embedded calc" seems interesting but I refuse using more tools or modes
because they always tend to create open loops which I'm having enough.
I think ob-calc is underestimated in the org-babel world - there is only
a few documentation on it. It could be of more value to document
calculations.
Thanks,
Heiko
On 15.03.20 13:06, Eric S Fraga wrote:
> On Sunday, 15 Mar 2020 at 11:46, Heiko Schmidt wrote:
>> - I want to use ob-calc to do some "literate calculation" with the
>> purpose to document what I thought at the time I wrote it.
> I have never managed to get ob-calc to do what I want either so I cannot
> help you directly with your query. Instead, I use embedded calc mode,
> along these lines:
>
> --8<---------------cut here---------------start------------->8---
> Number of cars (PKW) in germany:
>
> ncars := 45000000.
>
> Yearly mileage in [km/y]
>
> mileage := 15000 km/y
>
> Calculate amount of complete km per year
>
> mileage ncars => 675000000000. km / y
>
> --8<---------------cut here---------------end--------------->8---
>
>
> You have to activate embedded mode. By default, calc will look for
> expressions surrounded by empty lines. The := operator assigns values
> to variables and the => operator says to show the result here instead of
> replacing the expression with the result.
>
> As an aside, calc understands units which is quite nice...
>
> HTH,
> eric
>
```

Heiko Schmidt <Heiko.Schmidt@webbedtables.de> writes: > - problem: When evaluating the calc snippets the top of stack element > is dropped. Because every "begin/end_src calc" block drops the top > of stack, one can't reuse the result in following blocks. > Number of cars (PKW) in germany: > > #+begin_src calc :exports both > 45e6 > #+end_src > > > #+RESULTS: > : 45000000. > > Yearly mileage in [km/y] > > #+begin_src calc :exports both > 15000 > #+end_src > > > #+RESULTS: > : 15000 > > Calculate amount of complete km per year > > #+begin_src calc :exports both > '* > #+end_src > > > #+RESULTS: > : 675000000000. > - problem: babel removes the resulting top stack element from the > stack > > - tried solution: duplicate the last stack-element on evaluation with > "' " (emulate <space> press to duplicate the top element of the > stack in calc) > ** hope for a solution or work around from the community > > - preferred: Is there a way to leave the top of stack from one snippet > to the next (which I don't know)? > - alternative: Is there a way to duplicate the top of stack element > between begin/end_src calc blocks? > - any advice is appreciated. Okay. I take here the "any advice is appreciated" part. AFAICS at the org babel calc evaluation the last value of the calc stack gets dropped. So your workaround is okay, I think. You can just write any dummy element at the bottom of each block e.g. just 0. No need of duplication. Looks a bit hackish to me but so what? Another approach could be "noweb". Example (you would just evaluate the block at the bottom): --8<---------------cut here---------------start------------->8--- Number of cars (PKW) in germany: #+name: numcars #+begin_src calc :exports both 45e6 #+end_src Yearly mileage in [km/y] #+name: mileage #+begin_src calc :exports both 15000 #+end_src Calculate amount of complete km per year #+begin_src calc :noweb yes <<numcars>> <<mileage>> '* #+end_src --8<---------------cut here---------------end--------------->8--- HTH, -- Marco

```
On Wednesday, 18 Mar 2020 at 15:47, Marco Wahl wrote:
> AFAICS at the org babel calc evaluation the last value of the calc stack
> gets dropped.
>
> So your workaround is okay, I think. You can just write any dummy
> element at the bottom of each block e.g. just 0. No need of
> duplication. Looks a bit hackish to me but so what?
Indeed hackish. But it does beg the question: why does ob-calc pop the
stack? I cannot see any use case given that the stack is essentially
infinite and can be safely ignored (in most if not all cases).
Could the solution be to simply remove the =(calc-pop 1)= line at the
end of =org-babel-execute:calc= function?
Just a thought.
--
: Eric S Fraga via Emacs 28.0.50, Org release_9.3.6-432-g73bd24
```

```
Eric S Fraga <e.fraga@ucl.ac.uk> writes:
> On Wednesday, 18 Mar 2020 at 15:47, Marco Wahl wrote:
>> AFAICS at the org babel calc evaluation the last value of the calc stack
>> gets dropped.
>>
>> So your workaround is okay, I think. You can just write any dummy
>> element at the bottom of each block e.g. just 0. No need of
>> duplication. Looks a bit hackish to me but so what?
>
> Indeed hackish. But it does beg the question: why does ob-calc pop the
> stack? I cannot see any use case given that the stack is essentially
> infinite and can be safely ignored (in most if not all cases).
>
> Could the solution be to simply remove the =(calc-pop 1)= line at the
> end of =org-babel-execute:calc= function?
>
> Just a thought.
Possibly the originators thought about the typical use of calc blocks as
units which reduce to the top element of the stack. In this case the
calc-pop would be the right step to clean the stack.
Just another thought.
Ciao,
-- Marco
```

```
On Wednesday, 18 Mar 2020 at 17:23, Marco Wahl wrote:
> Possibly the originators thought about the typical use of calc blocks as
> units which reduce to the top element of the stack. In this case the
> calc-pop would be the right step to clean the stack.
Could be. Indeed, at the moment, if you pop up calc directly, it does
look the same as however you left it the last time you used it and not
popping the stack would ruin that feature.
So, changing ob-calc to not pop the result off might be undesirable
after all.
--
: Eric S Fraga via Emacs 28.0.50, Org release_9.3.6-432-g73bd24
```

Hi Marco, On 18.03.20 15:47, Marco Wahl wrote: > Okay. I take here the "any advice is appreciated" part. > AFAICS at the org babel calc evaluation the last value of the calc stack > gets dropped. > > So your workaround is okay, I think. You can just write any dummy > element at the bottom of each block e.g. just 0. No need of > duplication. Looks a bit hackish to me but so what? Oh no. You're completely right. This simplifying clarification is already quite helpful. Just putting 0 on top of stack is enough. Terrifying simple. > Another approach could be "noweb". Example (you would just evaluate the > block at the bottom): > > --8<---------------cut here---------------start------------->8--- > Number of cars (PKW) in germany: > > #+name: numcars > #+begin_src calc :exports both > 45e6 > #+end_src > > Yearly mileage in [km/y] > > #+name: mileage > #+begin_src calc :exports both > 15000 > #+end_src > > Calculate amount of complete km per year > > #+begin_src calc :noweb yes > <<numcars>> > <<mileage>> > '* > #+end_src > --8<---------------cut here---------------end--------------->8--- > > > HTH, > -- Marco > From my point of view "variablizing" distracts me to much. I'd prefer more to comment via "literate" description of the numbers.

```
On 18.03.20 16:50, Eric S Fraga wrote:
>
> Indeed hackish. But it does beg the question: why does ob-calc pop the
> stack? I cannot see any use case given that the stack is essentially
> infinite and can be safely ignored (in most if not all cases).
>
> Could the solution be to simply remove the =(calc-pop 1)= line at the
> end of =org-babel-execute:calc= function?
>
> Just a thought.
After removing
(calc-pop 1)
from =org-babel-execute:calc= the problem is perfectly solved.
Thanks a lot.
```