From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lawrence Bottorff Subject: Re: Generate new babel code blocks and/or initialized code/data? Date: Sat, 24 Sep 2016 16:53:51 -0400 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/alternative; boundary=94eb2c0779109f80c2053d4717ec Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:52621) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bntxL-0004zZ-Ci for emacs-orgmode@gnu.org; Sat, 24 Sep 2016 16:53:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bntxI-0003dF-VN for emacs-orgmode@gnu.org; Sat, 24 Sep 2016 16:53:54 -0400 Received: from mail-io0-x231.google.com ([2607:f8b0:4001:c06::231]:36823) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bntxI-0003cr-OS for emacs-orgmode@gnu.org; Sat, 24 Sep 2016 16:53:52 -0400 Received: by mail-io0-x231.google.com with SMTP id m79so149687863ioo.3 for ; Sat, 24 Sep 2016 13:53:52 -0700 (PDT) In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: "Thomas S. Dye" Cc: emacs-orgmode Mailinglist --94eb2c0779109f80c2053d4717ec Content-Type: text/plain; charset=UTF-8 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 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 > --94eb2c0779109f80c2053d4717ec Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Not sure if you know Clojure, but here's what I've= been toying with:

#+name: my-test
#+begi= n_src clojure :var i=3D[1 2]
(map inc i)
#+end_src

#+RESULTS: my-test
| 2 | 3 |

looks good, but then

#+name: = myfun1
#+begin_src clojure=C2=A0
(defn myfun1
=C2=A0 [ ]
=C2=A0 [8 9])
#+end_src
#+begin_src clojure :var i=3Dmyfunc1
(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=C2=A0
(d= efun mylist1 ()
=C2=A0 (list 1 2 3 4))
#+end_src
<= /div>

then

#+begin_src ema= cs-lisp :var myx=3D(mylist1)
(mapcar '1+ myx)
#+end= _src

#+RESULTS:
| 2 | 3 | 4 | 5 |
<= /div>

Note how I put mylist1 in parens. Without produced= odd output

#+RESULTS:
| 110 | 122 = | 109 | 106 | 116 | 117 | 50 |

. . . which i= s literally taking the ascii letters of the word "mylist1" and in= crementing 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 cod= e
> 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=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | :size |=C2= =A0 3 |
> | :name | left-eye=C2=A0 =C2=A0 =C2=A0 =C2=A0 | :size |=C2=A0 1 |
> | :name | right-eye=C2=A0 =C2=A0 =C2=A0 =C2=A0| :size |=C2=A0 1 |
> | :name | left-ear=C2=A0 =C2=A0 =C2=A0 =C2=A0 | :size |=C2=A0 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#orgheadl= ine13

You can pass the function results to a variable argument, which makes
possible chaining (see http://www.jstatsoft.org/v46/i03):
#+header: :var x=3Dmyfunc(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

--94eb2c0779109f80c2053d4717ec--