From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Thomas S. Dye" Subject: Re: Generate new babel code blocks and/or initialized code/data? Date: Sat, 24 Sep 2016 17:10:55 -1000 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:47072) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bo00X-0003gT-3N for emacs-orgmode@gnu.org; Sat, 24 Sep 2016 23:21:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bo00S-00043j-S4 for emacs-orgmode@gnu.org; Sat, 24 Sep 2016 23:21:36 -0400 Received: from gproxy9-pub.mail.unifiedlayer.com ([69.89.20.122]:57472) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1bo00S-00043R-GQ for emacs-orgmode@gnu.org; Sat, 24 Sep 2016 23:21:32 -0400 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: Lawrence Bottorff Cc: emacs-orgmode Mailinglist Aloha Lawrence, Here #+begin_src clojure :var i=(myfun1) (inc i) #+end_src you are asking emacs-lisp to evaluate myfun1, which is not an emacs-lisp function. See http://orgmode.org/manual/var.html#var, "Emacs Lisp evaluation of variables" I'm not sure why you are able to bypass the :var functionality in clojure. What you are seeing is the behavior I expect in a :session. I'm not a programmer--you'll need some input from a programmer on the list to sort this one out. hth, Tom Lawrence Bottorff writes: > If I evaluate this: > > #+name: myfun1 > #+begin_src clojure > (defn myfun1 > [ ] > 9) > #+end_src > > #+RESULTS: myfun1 > : #'clojure-noob.core/myfun1 > > then this > > #+begin_src clojure > (inc (myfun1)) > #+end_src > > #+RESULTS: > : 10 > > I've got the right answer, but I've totally bypassed the :var > functionality. In my elisp example > > #+begin_src emacs-lisp :var myx=(mylist1) > (mapcar '1+ myx) > #+end_src > > #+RESULTS: > | 2 | 3 | 4 | 5 | > > it seems to be as you say, i.e., the function needs to be evaluated, and, > yes, the mylist1 function in parens does the trick. But this > > #+begin_src clojure :var i=(myfun1) > (inc i) > #+end_src > > produces this in *Messages*: > > eval: Symbol’s function definition is void: myfun1 > > However, this > > #+name: myfun1-test2 > #+begin_src clojure > (myfun1) > #+end_src > > #+RESULTS: myfun1-test2 > : 9 > > does finally get seen and evaluated: > > #+begin_src clojure :var i=myfun1-test2 > (inc i) > #+end_src > > #+RESULTS: > : 10 > > But this adds an extra step just to use :var. I'm guessing regular Lisp and > maybe Scheme (geiser) know about var i=(myfun1), . Will test, but I've got > to swap out my .emacs.d first. As far as noweb is concerned, doing > <> doesn't win me anything, does it? It's the same as (myfun1) > above. > > > > > > > > > > > On Sat, Sep 24, 2016 at 8:03 PM, Thomas S. Dye wrote: > >> 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 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 >> -- Thomas S. Dye http://www.tsdye.com