From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: Org-Babel - Clojure & Lazy Sequences Bug Date: Sat, 06 Nov 2010 11:58:45 -0600 Message-ID: <87k4kqpc4q.fsf@gmail.com> References: Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from [140.186.70.92] (port=55705 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PEn2U-0001fB-0E for emacs-orgmode@gnu.org; Sat, 06 Nov 2010 13:58:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PEn2S-0000LK-Dr for emacs-orgmode@gnu.org; Sat, 06 Nov 2010 13:58:53 -0400 Received: from mail-gw0-f41.google.com ([74.125.83.41]:35752) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PEn2S-0000LB-6w for emacs-orgmode@gnu.org; Sat, 06 Nov 2010 13:58:52 -0400 Received: by gwb11 with SMTP id 11so3304617gwb.0 for ; Sat, 06 Nov 2010 10:58:51 -0700 (PDT) In-Reply-To: (Rick Moynihan's message of "Thu, 4 Nov 2010 14:11:39 +0000") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Rick Moynihan Cc: emacs-orgmode@gnu.org Hi Rick, I've noticed this as well. I'm not the original author of ob-clojure.el (Joel Boehland is), so I'm not sure how the clojure interaction currently works, although I know it makes heavy usage of slime. There must be an existing mechanism used by slime to unroll these lazy evaluations, for example in the repl (range 10) *is* expanded user> (range 10) (0 1 2 3 4 5 6 7 8 9) I'm using clojure extensively in my studies so I have all the more reason to try to figure this out. I'll put this on my stack. BTW: I've noticed that I am unable to get Clojure code blocks to play nicely with existing slime sessions, say for example I have some large piece of data in scope in a slime sessions and I'd like to access that data from a clojure code block and dump some analysis to an Org-mode document. I have not yet found out how to make this work. If you have, I'd love to hear how, otherwise I'll look into this as well. Best -- Eric Having just looked at this quickly, the following function over-defines `org-babel-execute:clojure' s.t. the body of the code block is sent to the superior list in the same manner as when calling `slime-eval-defun' from within a .clj file. While this doesn't handle starting up clojure instances or differentiate between session and external evaluation it should fix the issues mentioned above and could be the beginning of a permanent solution. #+begin_src emacs-lisp (defun org-babel-execute:clojure (body params) (with-temp-buffer (insert body) (read (slime-eval `(swank:interactive-eval-region ,(buffer-substring-no-properties (point-min) (point-max))))))) #+end_src which then results in #+begin_src clojure (map (fn [el] (list el (* el el))) (range 10)) #+end_src evaluating to #+results: | 0 | 0 | | 1 | 1 | | 2 | 4 | | 3 | 9 | | 4 | 16 | | 5 | 25 | | 6 | 36 | | 7 | 49 | | 8 | 64 | | 9 | 81 | Rick Moynihan writes: > I have the following org file: > > #+BEGIN_SRC clojure > (range 10) > #+END_SRC > > #+results: > : clojure.lang.LazySeq@f35bf8c6 > > Where as I would expect to see the sequence. Evaluating the code > inside a doall doesn't seem to do anything either: > > #+BEGIN_SRC clojure > (doall (range 10)) > #+END_SRC > > #+results: > : clojure.lang.LazySeq@f35bf8c6 > > Is there any parameter I can pass to the block to get the code to > execute in a doall and return the sequence values rather than the > lazy-seq object itself? > > R. > > _______________________________________________ > 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