emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Dan Davison <davison@stats.ox.ac.uk>
To: nicholas.dokos@hp.com
Cc: "Blanchette, Marco" <MAB@stowers.org>,
	"emacs-orgmode@gnu.org" <emacs-orgmode@gnu.org>
Subject: Re: Problem whit with code evaluation
Date: Thu, 19 Aug 2010 09:38:48 -0400	[thread overview]
Message-ID: <8739uabu3b.fsf@stats.ox.ac.uk> (raw)
In-Reply-To: <15801.1282194341@gamaville.dokosmarshall.org> (Nick Dokos's message of "Thu, 19 Aug 2010 01:05:41 -0400")

Nick Dokos <nicholas.dokos@hp.com> writes:

> Blanchette, Marco <MAB@stowers.org> wrote:
>
>> Hmm... Thanks Dan.
>> 
>> Do we have a different version of org-mode? I just pasted your code in emacs
>> and try to execute it with M-x org-babel-execute-buffer RET without success.
>> 
>> The emacs-lisp code works but the python and the R crashes with the
>> following errors taken from the *Org-Babel Error* Output buffer
>> 
>> Traceback (most recent call last):
>>   File "<stdin>", line 5, in <module>
>>   File "<stdin>", line 3, in main
>> NameError: global name 'x' is not defined
>> Error in main() : object 'x' not found
>> 
>> On 8/18/10 9:37 PM, "Dan Davison" <davison@stats.ox.ac.uk> wrote:
>> 
>> > * The python example
>> > #+source: square(x)
>> > #+begin_src python
>> > return x*x
>> > #+end_src
>> > 
>> > #+call: square(x=6)
>> > 
>> > #+results: square(x=6)
>> > : 36
>> > 
>
> I think that's because the first source block cannot be evaluated: it
> only makes sense when it is #+called. If you place the cursor in that
> first source block and press C-c C-c, you get exactly the same error. If
> you do the same on the #+call, it works. Since org-babel-execute-buffer
> just steps through the buffer and executes every source block, it's not
> too surprising that you get those errors.
>
> So I guess the question is whether org-babel-execute-buffer should be
> smarter about which source blocks to execute.

[By the way, lob/call lines were not exporting results correctly in any
case; I've just pushed a fix.]


Nick is right. 

So first a couple of workarounds:

1. For export, you can use ':exports none' or ':exports code' on the
function blocks which cannot be executed on their own.

2. You can supply default arguments to function blocks, which permits
them to be executed: #+source: square(x=0)

But (1) doesn't solve the `org-babel-execute-buffer' issue, and (2)
isn't a nice solution.

I've pasted a version of your examples below which exports without error
using workaround (1). It requires a fresh pull of Org from the git repo.

So what is a good solution here? I may be missing an existing solution
but two that come to mind are

1. Extend the existing :eval header arg, introducing a new value, say
   ':eval called' or ':eval passive' that says that while the block may
   not be executed itself, it may be called as a function.

2. Demand that such blocks use the keyword #+function: as opposed
   to #+source or #+srcname.

I'm initially attracted to (2).

Dan

--8<---------------cut here---------------start------------->8---
#+babel: :exports both

Examples take from
[[http://orgmode.org/worg/org-contrib/babel/intro.php#sec-7]]

* The python example
#+source: square(x)
#+begin_src python :exports code
return x*x
#+end_src

#+call: square(x=6)

* The elisp example of the fibonacci series using a table as argument

#+tblname: fibonacci-inputs
| 1 | 2 | 3 | 4 |  5 |  6 |  7 |  8 |  9 | 10 |
| 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 |

#+srcname: fibonacci-seq(fib-inputs=fibonacci-inputs)
#+begin_src emacs-lisp :exports both
  (defun fibonacci (n)
    (if (or (= n 0) (= n 1))
        n
      (+ (fibonacci (- n 1)) (fibonacci (- n 2)))))
  
  (mapcar (lambda (row)
            (mapcar #'fibonacci row)) fib-inputs)
#+end_src

* Then my own trial in R
#+srcname: test(x, y)
#+begin_src R :exports code
   p <- x*y
#+end_src

#+call: test(x=4, y=9)

text inbetween to force line break.

#+lob: test(x=3, y=8)
--8<---------------cut here---------------end--------------->8---



>
> Nick
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

      reply	other threads:[~2010-08-19 13:38 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-19  0:12 Problem whit with code evaluation Blanchette, Marco
2010-08-19  2:37 ` Dan Davison
2010-08-19  3:01   ` Blanchette, Marco
2010-08-19  4:23     ` Dan Davison
2010-08-19  5:05     ` Nick Dokos
2010-08-19 13:38       ` Dan Davison [this message]

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=8739uabu3b.fsf@stats.ox.ac.uk \
    --to=davison@stats.ox.ac.uk \
    --cc=MAB@stowers.org \
    --cc=emacs-orgmode@gnu.org \
    --cc=nicholas.dokos@hp.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).