emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Christian Moe <mail@christianmoe.com>
To: emacs-orgmode@gnu.org
Cc: Ihor Radchenko <yantar92@posteo.net>, Ypo <ypuntot@gmail.com>
Subject: Re: LIterate programming with calc (help)
Date: Mon, 24 Oct 2022 13:43:54 +0200	[thread overview]
Message-ID: <87zgdlwio5.fsf@christianmoe.com> (raw)
In-Reply-To: <87sfjd35xh.fsf@ucl.ac.uk>


Fraga, Eric writes:

> On Monday, 24 Oct 2022 at 09:20, Ihor Radchenko wrote:
>> I vaguely recall that storing variables in calc is something like
>> variable := assignment (which is actually rewrite rule, but that's how
>> 13.1 Storing Variables section of the calc manual explains variable
>> assignments).
>
> That is true for embedded calc (which I use all the time) but I cannot
> seem to get this to work for src blocks:


Same: it requires using the `s s' (calc-store) command, though (which
can also be done without the := assignment operator), and I've searched
the manual without spotting a way to do that with algebraic entry and
hence in a src block, as there doesn't seem to be any corresponding
command. I hope there is a way, though!

As an unsatisfying workaround, one could use :var header arguments; they
work up to a point, but not with units, as Ypo wants to use (and which
are are a really cool thing about Calc).

Once one's using variables, it will probably be necessary to wrap the
final calculation in evalv() to get a numeric value as output instead of
a formula with the variable names in it.

Another obstacle to what Ypo is trying to do is the attempt to use the $
sign for the currency unit. Calc does not have pre-defined currency
units, and $ is taken - it refers to the last value on stack. I tend to
use 'USD'.

So a partial, if pointless, way to do this would be to first store the
variables with the calculator:

  ' 300 m
    s s a       # store a = 300 m
  ' 300 m
    s s b       # store b = 300 m
  ' 1 USD/m^2
    s s cost    # store cost = (1) usd/m^2
  ' a*b
    s s Area    # store Area = a*b (*not* 90000 m^2)

Then the last step could be done in a src block:

  #+begin_src calc
    evalv(Area * cost)
  #+end_src

  #+RESULTS:
  : 90000 USD

(Another cool bit: If you change the value of a or b and rerun the src
block, the result will change, since what was stored in Area was the
product of the variables, not the product of their values.)

Yours,
Christian


  reply	other threads:[~2022-10-24 11:48 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-23 12:15 LIterate programming with calc (help) Ypo
2022-10-24  7:56 ` Fraga, Eric
2022-10-24  9:20   ` Ihor Radchenko
2022-10-24  9:51     ` Fraga, Eric
2022-10-24 11:43       ` Christian Moe [this message]
2022-10-24 11:26   ` Ypo
2022-10-24 15:25     ` Fraga, Eric
2022-10-31  9:23 ` Ihor Radchenko
2022-10-31  9:54   ` Fraga, Eric
2022-11-01  7:22     ` Ihor Radchenko
  -- strict thread matches above, loose matches on Subject: below --
2022-11-26 20:16 Ypo
2023-09-10 13:06 Literate " Ypo

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.orgmode.org/

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

  git send-email \
    --in-reply-to=87zgdlwio5.fsf@christianmoe.com \
    --to=mail@christianmoe.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=yantar92@posteo.net \
    --cc=ypuntot@gmail.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

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