emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Thomas S. Dye" <tsd@tsdye.com>
To: Lawrence Bottorff <borgauf@gmail.com>
Cc: emacs-orgmode Mailinglist <emacs-orgmode@gnu.org>
Subject: Re: Generate new babel code blocks and/or initialized code/data?
Date: Sat, 24 Sep 2016 14:03:34 -1000	[thread overview]
Message-ID: <m24m54voa1.fsf@tsdye.com> (raw)
In-Reply-To: <CAFAhFSXzoTe=Mv0rjKEdER+eCTfNHHtsUTrRY0Xd1iZQrynSxQ@mail.gmail.com>

Aloha Lawrence,

I don't know the Clojure dialect, but I think the problem is that the
myfun1 source code block returns a function.  It doesn't evaluate
the function and return a result, which is I think what you are
expecting. 

You can use noweb expansion of myfun1 to define the function inside
another source code block, then use the function in the normal way in
the source code block (or in the session, if you have that set).

Or, you might change the myfun1 source code block to return a list,
rather than a function (if I'm reading Clojure correctly):

#+name: myfun1
#+begin_source clojure
[8 9]
#+end_source

hth,
Tom

Lawrence Bottorff writes:

> Not sure if you know Clojure, but here's what I've been toying with:
>
> #+name: my-test
> #+begin_src clojure :var i=[1 2]
> (map inc i)
> #+end_src
>
> #+RESULTS: my-test
> | 2 | 3 |
>
> looks good, but then
>
> #+name: myfun1
> #+begin_src clojure
> (defn myfun1
>   [ ]
>   [8 9])
> #+end_src
>
> #+begin_src clojure :var i=myfunc1
> (map inc i)
> #+end_src
>
> doesn't do anything, i.e., it doesn't process the myfunc1 and provide the
> vector [8 9]
>
> This elisp code works, though:
>
> #+name: mylist1
> #+begin_src emacs-lisp
> (defun mylist1 ()
>   (list 1 2 3 4))
> #+end_src
>
> then
>
> #+begin_src emacs-lisp :var myx=(mylist1)
> (mapcar '1+ myx)
> #+end_src
>
> #+RESULTS:
> | 2 | 3 | 4 | 5 |
>
> Note how I put mylist1 in parens. Without produced odd output
>
> #+RESULTS:
> | 110 | 122 | 109 | 106 | 116 | 117 | 50 |
>
> . . . which is literally taking the ascii letters of the word "mylist1" and
> incrementing them. (Too much fun. . . ). What might be wrong with my
> Clojure attempt? I've tried (myfun1), myfun1, and myfun1() gives an error.
>
>
>
> On Tue, Sep 20, 2016 at 3:33 PM, Thomas S. Dye <tsd@tsdye.com> wrote:
>
>> Aloha Lawrence,
>>
>> Lawrence Bottorff writes:
>>
>> > So I can run code for a REPL-type language like Clojure in a babel code
>> > block and get "results," e.g., a Clojure code block takes in a vector of
>> > mappings and produces new "results":
>> >
>> > #+RESULTS[abc5c51bb569a82c19c4eea1c385c74e839922c7]:
>> > symmetrize-body-parts-test
>> > | :name | head            | :size |  3 |
>> > | :name | left-eye        | :size |  1 |
>> > | :name | right-eye       | :size |  1 |
>> > | :name | left-ear        | :size |  1 |
>> > . . .
>> >
>> > but could I generate results that aren't just static output listed after
>> a
>> > #+RESULTS tag, rather, embedded in a newly created babel code block? I'd
>> > like such output "initialized" as far as the running REPL is concerned
>> too.
>> > Is it possible to generate new code/data that is immediately known to the
>> > REPL session? Any examples don't have to be Clojure.
>>
>> You can use the :session header argument which will give you access to
>> any variables created during the session:
>>
>> http://orgmode.org/worg/org-contrib/babel/languages/ob-
>> doc-clojure.html#orgheadline13
>>
>> You can pass the function results to a variable argument, which makes
>> possible chaining (see http://www.jstatsoft.org/v46/i03):
>>
>> #+header: :var x=myfunc(2)
>>
>> You can also embed and call a function in a source code block using noweb
>> syntax:
>>
>> http://orgmode.org/worg/org-contrib/babel/intro.html#literate-programming
>>
>> hth,
>> Tom
>>
>> --
>> Thomas S. Dye
>> http://www.tsdye.com
>>


-- 
Thomas S. Dye
http://www.tsdye.com

  parent reply	other threads:[~2016-09-25  0:30 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-20 19:07 Generate new babel code blocks and/or initialized code/data? Lawrence Bottorff
2016-09-20 19:33 ` Thomas S. Dye
2016-09-24 20:53   ` Lawrence Bottorff
2016-09-24 21:02     ` Lawrence Bottorff
2016-09-25  0:03     ` Thomas S. Dye [this message]
2016-09-25  1:49       ` Lawrence Bottorff
2016-09-25  3:10         ` Thomas S. Dye

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=m24m54voa1.fsf@tsdye.com \
    --to=tsd@tsdye.com \
    --cc=borgauf@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    /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).