emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] Possible Calc support for Org-Babel?


From: Eric Schulte
Subject: Re: [Orgmode] Possible Calc support for Org-Babel?
Date: Fri, 29 Oct 2010 00:42:53 -0600
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

"Eric Schulte" <address@hidden> writes:

>
> Although I'm not familiar with using Calc as anything more than a 1-off
> calculator in the bottom of the frame (i.e. M-x calc) this sounds like a
> good approach to using calc to execute code blocks.
>

Did I mention I'm not familiar with Calc.

I've thrown together a very naive first pass at a function for
evaluating calc code blocks.  This inverts the normal calc (as I
understand it) use of ' prefixes and assumes that every line is an
algebraic expression unless that line is prefixed with a ' in which case
it is taken as a stack operation.

This *does* change the value of the stack, allowing multiple code blocks
to collaborate, in effect treating the stack as a session.  I'd be
interested to hear what real calc users think of this approach.

Best -- Eric

to use this evaluate the following function, and then try the subsequent
code blocks

evaluate this code block to add support for calc code blocks
#+begin_src emacs-lisp
  (defun org-babel-execute:calc (body params)
    "Execute a block of calc code with Babel."
    (mapcar
     (lambda (line)
       (when (> (length line) 0)
         (if (string= "'" (substring line 0 1))
             (funcall (lookup-key calc-mode-map (substring line 1)) nil)
           (calc-push-list (list (math-read-number (calc-eval line)))))))
     (split-string body "[\n\r]"))
    (calc-eval (calc-top 1)))
#+end_src

This block pushes 1 and 2 on the stack, then adds them
#+begin_src calc
  1
  2
  '+
#+end_src

This block evaluates 3^3 with calc pushing the result on the stack and
returning it into the Org-mode buffer
#+begin_src calc
  3^3
#+end_src

This block evaluates (2+2)*4 pushing the result on the stack, it then
calls calc-plus adding the top two elements on the stack (one of which
is left over from the previous code block).
#+begin_src calc
  (2+2)*4
  '+
#+end_src



reply via email to

[Prev in Thread] Current Thread [Next in Thread]