*LIterate programming with calc (help)@ 2022-10-23 12:15 Ypo2022-10-24 7:56 ` Fraga, Eric 2022-10-31 9:23 ` Ihor Radchenko 0 siblings, 2 replies; 12+ messages in thread From: Ypo @ 2022-10-23 12:15 UTC (permalink / raw) To: Org-mode [-- Attachment #1: Type: text/plain, Size: 549 bytes --] Is it possible to express in a calc block some basic operations with variables and non-predefined units? For example, if you wanted to build a code block that calculates how much money costs: a land with an Area of 300x300 m^2 at a price of 1 $/m^2. Would it be something like this? #+begin_src calc a = 300 m b = 300 m Area = a*b cost = 1 ($/m^2) A*c #+end_src Is it possible to work with the "$" unit? Why A*c won't show an arithmetic result, but ~: A c ~? Wanted result is: #+RESULTS: : 90 000 $ Best regards [-- Attachment #2: Type: text/html, Size: 1892 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread

*Re: LIterate programming with calc (help)2022-10-23 12:15 LIterate programming with calc (help) Ypo@ 2022-10-24 7:56 ` Fraga, Eric2022-10-24 9:20 ` Ihor Radchenko 2022-10-24 11:26 ` Ypo 2022-10-31 9:23 ` Ihor Radchenko 1 sibling, 2 replies; 12+ messages in thread From: Fraga, Eric @ 2022-10-24 7:56 UTC (permalink / raw) To: Ypo;+Cc:Org-mode On Sunday, 23 Oct 2022 at 14:15, Ypo wrote: > Is it possible to express in a calc block some basic operations with > variables and non-predefined units? > Why A*c won't show an arithmetic result, but ~: A c ~? I've never managed to get calc blocks define variables. The equations you have typed in are "equations" in the mathematical sense, not assignment statements. > Is it possible to work with the "$" unit? $ means something specific in calc (cannot remember what). I use "USD" instead, for instance, and it works fine. The following single line calc block does do what you want: #+begin_src calc solve([a = 300 m, b = 300 m, Area = a*b, cost = 1 (USD/m^2), z = Area*cost], [a, b, Area, cost, z]) #+end_src #+results: : [a = 300 m, b = 300 m, Area = 90000 m^2, cost = USD / m^2, z = 90000 USD] -- : Eric S Fraga, with org release_9.5.5-966-g88c85d in Emacs 29.0.50 ^ permalink raw reply [flat|nested] 12+ messages in thread

*Re: LIterate programming with calc (help)2022-10-24 7:56 ` Fraga, Eric@ 2022-10-24 9:20 ` Ihor Radchenko2022-10-24 9:51 ` Fraga, Eric 2022-10-24 11:26 ` Ypo 1 sibling, 1 reply; 12+ messages in thread From: Ihor Radchenko @ 2022-10-24 9:20 UTC (permalink / raw) To: Fraga, Eric;+Cc:Ypo, Org-mode "Fraga, Eric" <e.fraga@ucl.ac.uk> writes: > On Sunday, 23 Oct 2022 at 14:15, Ypo wrote: >> Is it possible to express in a calc block some basic operations with >> variables and non-predefined units? > >> Why A*c won't show an arithmetic result, but ~: A c ~? > > I've never managed to get calc blocks define variables. The equations > you have typed in are "equations" in the mathematical sense, not > assignment statements. 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). -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 12+ messages in thread

*Re: LIterate programming with calc (help)2022-10-24 9:20 ` Ihor Radchenko@ 2022-10-24 9:51 ` Fraga, Eric2022-10-24 11:43 ` Christian Moe 0 siblings, 1 reply; 12+ messages in thread From: Fraga, Eric @ 2022-10-24 9:51 UTC (permalink / raw) To: Ihor Radchenko;+Cc:Ypo, Org-mode 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: #+begin_src calc a := 300 m 2 a #+end_src #+results: : 2 a whereas embedded mode works fine: a := 300 m and 2 a => 600 m I really do not understand how calc src blocks work (I've not looked at the code, mind you). -- : Eric S Fraga, with org release_9.5.5-966-g88c85d in Emacs 29.0.50 ^ permalink raw reply [flat|nested] 12+ messages in thread

*Re: LIterate programming with calc (help)2022-10-24 7:56 ` Fraga, Eric 2022-10-24 9:20 ` Ihor Radchenko@ 2022-10-24 11:26 ` Ypo2022-10-24 15:25 ` Fraga, Eric 1 sibling, 1 reply; 12+ messages in thread From: Ypo @ 2022-10-24 11:26 UTC (permalink / raw) To: Org Mode List [-- Attachment #1: Type: text/plain, Size: 1342 bytes --] Not bad, thanks!!! Why do you think it doesn't work something more human readable like this? #+begin_src calc solve([ a = 300 m, b = 300 m, Area = a*b, cost = 1 (USD/m^2), z = Area*cost ], [a, b, Area, cost, z]) #+end_src Best regards El 24/10/2022 a las 9:56, Fraga, Eric escribió: > On Sunday, 23 Oct 2022 at 14:15, Ypo wrote: >> Is it possible to express in a calc block some basic operations with >> variables and non-predefined units? >> Why A*c won't show an arithmetic result, but ~: A c ~? > I've never managed to get calc blocks define variables. The equations > you have typed in are "equations" in the mathematical sense, not > assignment statements. > >> Is it possible to work with the "$" unit? > $ means something specific in calc (cannot remember what). I use "USD" > instead, for instance, and it works fine. > > The following single line calc block does do what you want: > > #+begin_src calc > solve([a = 300 m, b = 300 m, Area = a*b, cost = 1 (USD/m^2), z = Area*cost], [a, b, Area, cost, z]) > #+end_src > > #+results: > : [a = 300 m, b = 300 m, Area = 90000 m^2, cost = USD / m^2, z = 90000 USD] > [-- Attachment #2: Type: text/html, Size: 2477 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread

*Re: LIterate programming with calc (help)2022-10-24 9:51 ` Fraga, Eric@ 2022-10-24 11:43 ` Christian Moe0 siblings, 0 replies; 12+ messages in thread From: Christian Moe @ 2022-10-24 11:43 UTC (permalink / raw) To: emacs-orgmode;+Cc:Ihor Radchenko, Ypo 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 ^ permalink raw reply [flat|nested] 12+ messages in thread

*Re: LIterate programming with calc (help)2022-10-24 11:26 ` Ypo@ 2022-10-24 15:25 ` Fraga, Eric0 siblings, 0 replies; 12+ messages in thread From: Fraga, Eric @ 2022-10-24 15:25 UTC (permalink / raw) To: Ypo;+Cc:Org Mode List On Monday, 24 Oct 2022 at 13:26, Ypo wrote: > Why do you think it doesn't work something more human readable like this? > > #+begin_src calc > solve([ > a = 300 m, > b = 300 m, > Area = a*b, > cost = 1 (USD/m^2), > z = Area*cost > > ], [a, b, Area, cost, z]) > #+end_src It only parses a line at a line unfortunately. This would work in Maxima, mind you. ;-) (with some minor change in syntax, of course) -- : Eric S Fraga, with org release_9.5.5-966-g88c85d in Emacs 29.0.50 ^ permalink raw reply [flat|nested] 12+ messages in thread

*Re: LIterate programming with calc (help)2022-10-23 12:15 LIterate programming with calc (help) Ypo 2022-10-24 7:56 ` Fraga, Eric@ 2022-10-31 9:23 ` Ihor Radchenko2022-10-31 9:54 ` Fraga, Eric 1 sibling, 1 reply; 12+ messages in thread From: Ihor Radchenko @ 2022-10-31 9:23 UTC (permalink / raw) To: Ypo;+Cc:Org-mode Ypo <ypuntot@gmail.com> writes: > Would it be something like this? > > #+begin_src calc > a = 300 m > b = 300 m > Area = a*b > cost = 1 ($/m^2) > A*c > > #+end_src I looked into ob-calc and it looks like the way to define variables is via :var header argument. Other than that, ob-calc simply does what calc would do if you type the above into calc stack. Which would also yield nothing. I guess that the main problem is that calc is tightly integrated with interactive commands. Maybe ob-calc could be extended to somehow indicate the commands to be executed in addition to inputting stack entries. Not sure if there is much interest in such feature though. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 12+ messages in thread

*Re: LIterate programming with calc (help)2022-10-31 9:23 ` Ihor Radchenko@ 2022-10-31 9:54 ` Fraga, Eric2022-11-01 7:22 ` Ihor Radchenko 0 siblings, 1 reply; 12+ messages in thread From: Fraga, Eric @ 2022-10-31 9:54 UTC (permalink / raw) To: Ihor Radchenko;+Cc:Ypo, Org-mode On Monday, 31 Oct 2022 at 09:23, Ihor Radchenko wrote: > I looked into ob-calc and it looks like the way to define variables is > via :var header argument. Indeed. Something like :var a="300 m" does work. > I guess that the main problem is that calc is tightly integrated with > interactive commands. Maybe ob-calc could be extended to somehow > indicate the commands to be executed in addition to inputting stack > entries. > > Not sure if there is much interest in such feature though. Thinking out loud, what would be better, but I have no idea how feasible it would be, would be to have ob-calc make use of the embedded calc functionality and syntax, so that you could write something like this: #+begin_src calc a := 300 m b := 2 a => #+end_src which would output the result of any line with => on it. -- : Eric S Fraga, with org release_9.5.5-1028-gcd835d in Emacs 29.0.50 ^ permalink raw reply [flat|nested] 12+ messages in thread

*2022-10-31 9:54 ` Fraga, EricRe: LIterate programming with calc (help)@ 2022-11-01 7:22 ` Ihor Radchenko0 siblings, 0 replies; 12+ messages in thread From: Ihor Radchenko @ 2022-11-01 7:22 UTC (permalink / raw) To: Fraga, Eric, Tom Gillespie;+Cc:Ypo, Org-mode "Fraga, Eric" <e.fraga@ucl.ac.uk> writes: >> I guess that the main problem is that calc is tightly integrated with >> interactive commands. Maybe ob-calc could be extended to somehow >> indicate the commands to be executed in addition to inputting stack >> entries. >> >> Not sure if there is much interest in such feature though. > > Thinking out loud, what would be better, but I have no idea how feasible > it would be, would be to have ob-calc make use of the embedded calc > functionality and syntax, so that you could write something like this: > > #+begin_src calc > a := 300 m > b := 2 a => > #+end_src > > which would output the result of any line with => on it. I am CCing Tom Gillespie, the maintainer of ob-calc. Maybe he has something to say. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92> ^ permalink raw reply [flat|nested] 12+ messages in thread

*Re: Literate programming with calc (help)@ 2023-09-10 13:06 Ypo0 siblings, 0 replies; 12+ messages in thread From: Ypo @ 2023-09-10 13:06 UTC (permalink / raw) To: yantar92;+Cc:Org-mode [-- Attachment #1: Type: text/plain, Size: 1585 bytes --] I have discovered, taking a look at the Org Manual, that exists an embedded mode for Calc. https://www.gnu.org/software/emacs/manual/html_mono/calc.html#Assignments-in-Embedded-Mode Using "C-x * e" it solves this kind of formula with units: a := 3 m / s t := 7 s a t => > > From: Ihor Radchenko > > Subject: Re: LIterate programming with calc (help) > > Date: Tue, 01 Nov 2022 07:22:18 +0000 > > ------------------------------------------------------------------------ > "Fraga, Eric"<e.fraga@ucl.ac.uk> writes: > > >/> I guess that the main problem is that calc is tightly integrated with/ > >/> interactive commands. Maybe ob-calc could be extended to somehow/ > >/> indicate the commands to be executed in addition to inputting stack/ > >/> entries./ > >/>/ > >/> Not sure if there is much interest in such feature though./ > >// > >/Thinking out loud, what would be better, but I have no idea how feasible/ > >/it would be, would be to have ob-calc make use of the embedded calc/ > >/functionality and syntax, so that you could write something like this:/ > >// > >/#+begin_src calc/ > >/a := 300 m/ > >/b := 2 a =>/ > >/#+end_src/ > >// > >/which would output the result of any line with => on it./ > > I am CCing Tom Gillespie, the maintainer of ob-calc. Maybe he has > something to say. > > -- > Ihor Radchenko // yantar92, > Org mode contributor, > Learn more about Org mode at <https://orgmode.org/>. > Support Org development at <https://liberapay.com/org-mode>, > or support my work at <https://liberapay.com/yantar92> > > > > > > > > > [-- Attachment #2: Type: text/html, Size: 3774 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread

*Re: LIterate programming with calc (help)@ 2022-11-26 20:16 Ypo0 siblings, 0 replies; 12+ messages in thread From: Ypo @ 2022-11-26 20:16 UTC (permalink / raw) To: yantar92, Org-mode [-- Attachment #1: Type: text/plain, Size: 2098 bytes --] Just in case you find this package interesting. Except some problems with units conversion, it's nice: https://github.com/sulami/literate-calc-mode.el > This is a literate calc file. > > Lines without "=" are ignored. > > All results starting with "=>" are an overlay generated by > literate-calc-mode. That means they are displayed in Emacs, but not > actually in the buffer/file contents. > > We can calculate a value like so: > > = 2 + 2 => 4 > > If there is any string on the left hand side, it becomes a bound > variable. > > Pi = 3.14159 => Pi: 3.14159 > > We can use this variable below the definiton. > > Tau = Pi * 2 => Tau: 6.28318 > > Results are calculated using Emacs' own calc, so you can use formulas > as well. > > = round(Pi, 2) => 3.14 > > Later bindings shadow earlier ones: > > Pi = 3 => Pi: 3 > > = Pi => 3 > > Variable names can have spaces as well: > > Monthly Expenses = 500 => Monthly Expenses: 500 > > Monthly Income = 1000 => Monthly Income: 1000 > > Annual Savings = 12 * (Monthly Income - Monthly Expenses) => Annual Savings: 6000 > > All values are recalculated on every update in a spreadsheet-like > fashion. > > Calc also has a lot of advanced features, like arrays: > > Numbers = [1 2 3] => Numbers: [1, 2, 3] > > = 3 Numbers => [3, 6, 9] > "Fraga, Eric"<e.fraga@ucl.ac.uk> writes: > > >/> I guess that the main problem is that calc is tightly integrated with/ > >/> interactive commands. Maybe ob-calc could be extended to somehow/ > >/> indicate the commands to be executed in addition to inputting stack/ > >/> entries./ > >/>/ > >/> Not sure if there is much interest in such feature though./ > > > >/Thinking out loud, what would be better, but I have no idea how feasible/ > >/it would be, would be to have ob-calc make use of the embedded calc/ > >/functionality and syntax, so that you could write something like this:/ > > > >/#+begin_src calc/ > >/a := 300 m/ > >/b := 2 a =>/ > >/#+end_src/ > > > >/which would output the result of any line with => on it./ > > I am CCing Tom Gillespie, the maintainer of ob-calc. Maybe he has > something to say. [-- Attachment #2: Type: text/html, Size: 2818 bytes --] ^ permalink raw reply [flat|nested] 12+ messages in thread

end of thread, other threads:[~2023-09-10 13:12 UTC | newest]Thread overview:12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 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 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 2022-11-26 20:16 Ypo 2023-09-10 13:06 Literate " Ypo

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