emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Eric Schulte" <schulte.eric@gmail.com>
To: Rick Moynihan <rick.moynihan@gmail.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: Org-Babel - Clojure & Lazy Sequences Bug
Date: Sat, 06 Nov 2010 11:58:45 -0600	[thread overview]
Message-ID: <87k4kqpc4q.fsf@gmail.com> (raw)
In-Reply-To: <AANLkTimmmU8FfhikEYnMTftRyPvwUjZQg5TuPD4xoA2r@mail.gmail.com> (Rick Moynihan's message of "Thu, 4 Nov 2010 14:11:39 +0000")

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 <rick.moynihan@gmail.com> 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

  reply	other threads:[~2010-11-06 17:58 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-04 14:11 Rick Moynihan
2010-11-06 17:58 ` Eric Schulte [this message]
2010-11-24  1:51   ` Rick Moynihan
2010-11-25 17:40     ` Eric Schulte
2010-11-25 18:31       ` Rick Moynihan
2010-11-26 20:29         ` Eric Schulte
2010-11-26 20:53           ` Rick Moynihan
2010-11-26 22:49             ` Eric Schulte
2010-11-27  8:27               ` Achim Gratz
2010-11-27 15:20                 ` Eric Schulte
2010-11-28 23:23                   ` Rick Moynihan
2010-11-29  3:59                     ` Eric Schulte

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=87k4kqpc4q.fsf@gmail.com \
    --to=schulte.eric@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=rick.moynihan@gmail.com \
    --subject='Re: Org-Babel - Clojure & Lazy Sequences Bug' \
    /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

Code repositories for project(s) associated with this 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).