I see, thanks very much.

[stardiviner]           <Hack this world!>      GPG key ID: 47C32433
IRC(freeenode): stardiviner                     Twitter:  @numbchild
Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
Blog: http://stardiviner.github.io/

On Sun, Jun 18, 2017 at 9:10 AM, Tim Cross <theophil...@gmail.com> wrote:

>
> It looks like you have a combination of both clojure errors and possibly
> org babel errors. You need to sort out the clojure errors before you can
> verify there are any problems with org babel clojure support.
>
> You mention that
>
> > I start CIDER REPL session with `cider-jack-in` without project in
> > Emacs.
>
> but then you say
>
> > But I require `incanter` works, I have `incanter` in Leiningen
> > dependencies.
>
> However, if you don't have a project, then you don't have a project.clj
> file and if you don't have a project.clj file, you don't have a
> :dependencies block with incanter as a specified dependency, so incanter
> is not in your classpath and therefore will not be found when you try to
> require it.
>
> Note also that you have incorrect syntax for your require
> statement. Also to be clear, (ns ... (:require ...)) does not define
> dependencies. It simply loads the library into the namespace.
>
> The correct syntax for your first block is
>
> (ns my-kk
>   (:require [incanter.core :as k]))
>
> There is no quote before the lib spec - this is also what the error
> message is telling you. If you call require as a function, then you do
> need to use the quote i.e.
>
> (require 'incanter.core :as k)
>
> You appear to have two main problems here and that is making things
> 'muddy'. I'm guessing your learning clojure as well as using org babel
> clojure support. You need to sort out the clojure problems first. Highly
> recommend you suspend using org mode to do your clojure until your
> across all the clojure specifics and have a good understanding of the
> clojure environment. You will need a good understanding of how clojure
> works to then be able to work out what you need to do to get it to work
> with org mode. Trying to do both at the same time will just cause
> confusion.
>
> HTH
>
> Tim
>
> numbch...@gmail.com writes:
>
> > I did configure `ob-clojure` with the following settings:
> >
> > ```elisp
> > (require 'ob-clojure)
> >
> > ;; use CIDER as the Clojure execution backend
> > (setq org-babel-clojure-backend 'cider)
> >
> > ;; Useful keybindings when using Clojure from Org
> > ;; (org-defkey org-mode-map (kbd "C-x C-e") 'cider-eval-last-sexp)
> > ;; (org-defkey org-mode-map (kbd "C-c C-d") 'cider-doc)
> >
> > ;; No timeout when executing calls on Cider via nrepl
> > ;; (setq org-babel-clojure-sync-nrepl-timeout nil)
> >
> > ;; let `ob-clojure' babel src blocks allow evaluation.
> > (add-to-list 'org-babel-default-header-args:clojure
> >              '(:eval . "yes"))
> > (add-to-list 'org-babel-default-header-args:clojure
> >              '(:results . "output"))
> > ;; (add-to-list 'org-babel-default-header-args:clojure
> > ;;              '(:show-process . t))
> > ```
> >
> > I start CIDER REPL session with `cider-jack-in` without project in Emacs.
> >
> > I changed namespace to `user` in src blocks like this:
> >
> > ```org
> > #+BEGIN_SRC clojure
> > (ns user
> >   (:require '[incanter.core :as kk]))
> > #+END_SRC
> >
> > #+RESULTS:
> >
> > #+BEGIN_SRC clojure :session :results output
> > (print "hi")
> > (def kkkk "hello")
> > #+END_SRC
> >
> > #+RESULTS:
> > : hi
> > ```
> >
> > Then it works.
> >
> > Seems you're right, might my first src block can't work correctly. That
> > caused second src block evaluation failed.
> >
> > But I require `incanter` works, I have `incanter` in Leiningen
> dependencies.
> > ```clojure
> > (require '[incanter.core :as kk])
> > ```
> >
> > But include `incanter` in namespace failed:
> > ```clojure
> > (ns user
> >   (:require '[incanter.core :as kk]))
> > ```
> > with the following error.
> > ```
> >   Show: Clojure Java REPL Tooling Duplicates All  (29 frames hidden)
> >
> > 2. Unhandled clojure.lang.Compiler$CompilerException
> >    Error compiling Code/learning/Emacs/Org-mode/ob-clojure.org at (1:1)
> >
> >                   core.clj: 5771  clojure.core/throw-if
> >                   core.clj: 5835  clojure.core/load-lib
> >                   core.clj: 5832  clojure.core/load-lib
> >                RestFn.java:  142  clojure.lang.RestFn/applyTo
> >                   core.clj:  659  clojure.core/apply
> >                   core.clj: 5893  clojure.core/load-libs
> >                   core.clj: 5873  clojure.core/load-libs
> >                RestFn.java:  137  clojure.lang.RestFn/applyTo
> >                   core.clj:  659  clojure.core/apply
> >                   core.clj: 5911  clojure.core/require
> >                   core.clj: 5911  clojure.core/require
> >                RestFn.java:  408  clojure.lang.RestFn/invoke
> >                       REPL:    1  user/eval46259/loading--auto--
> >                       REPL:    1  user/eval46259
> >                       REPL:    1  user/eval46259
> >              Compiler.java: 6977  clojure.lang.Compiler/eval
> >              Compiler.java: 6966  clojure.lang.Compiler/eval
> >              Compiler.java: 6940  clojure.lang.Compiler/eval
> >                   core.clj: 3187  clojure.core/eval
> >                   core.clj: 3183  clojure.core/eval
> >                   main.clj:  242  clojure.main/repl/read-eval-print/fn
> >                   main.clj:  242  clojure.main/repl/read-eval-print
> >                   main.clj:  260  clojure.main/repl/fn
> >                   main.clj:  260  clojure.main/repl
> >                   main.clj:  176  clojure.main/repl
> >                RestFn.java: 1523  clojure.lang.RestFn/invoke
> >     interruptible_eval.clj:   87
> >  clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
> >                   AFn.java:  152  clojure.lang.AFn/applyToHelper
> >                   AFn.java:  144  clojure.lang.AFn/applyTo
> >                   core.clj:  657  clojure.core/apply
> >                   core.clj: 1963  clojure.core/with-bindings*
> >                   core.clj: 1963  clojure.core/with-bindings*
> >                RestFn.java:  425  clojure.lang.RestFn/invoke
> >     interruptible_eval.clj:   85
> >  clojure.tools.nrepl.middleware.interruptible-eval/evaluate
> >     interruptible_eval.clj:   55
> >  clojure.tools.nrepl.middleware.interruptible-eval/evaluate
> >     interruptible_eval.clj:  222
> >  clojure.tools.nrepl.middleware.interruptible-eval/
> interruptible-eval/fn/fn
> >     interruptible_eval.clj:  190
> >  clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
> >                   AFn.java:   22  clojure.lang.AFn/run
> >    ThreadPoolExecutor.java: 1142
> >  java.util.concurrent.ThreadPoolExecutor/runWorker
> >    ThreadPoolExecutor.java:  617
> >  java.util.concurrent.ThreadPoolExecutor$Worker/run
> >                Thread.java:  745  java.lang.Thread/run
> >
> > 1. Caused by java.lang.Exception
> >    Found lib name 'incanter.stats' containing period with prefix 'quote'.
> > lib
> >    names inside prefix lists must not contain periods
> >
> >                   core.clj:  659  clojure.core/apply
> >                   core.clj: 5893  clojure.core/load-libs
> >                   core.clj: 5873  clojure.core/load-libs
> >                RestFn.java:  137  clojure.lang.RestFn/applyTo
> >                   core.clj:  659  clojure.core/apply
> >                   core.clj: 5911  clojure.core/require
> >                   core.clj: 5911  clojure.core/require
> >                RestFn.java:  408  clojure.lang.RestFn/invoke
> >                       REPL:    1  user/eval46259/loading--auto--
> >                       REPL:    1  user/eval46259
> >                       REPL:    1  user/eval46259
> >              Compiler.java: 6977  clojure.lang.Compiler/eval
> >              Compiler.java: 6966  clojure.lang.Compiler/eval
> >              Compiler.java: 6940  clojure.lang.Compiler/eval
> >                   core.clj: 3187  clojure.core/eval
> >                   core.clj: 3183  clojure.core/eval
> >                   main.clj:  242  clojure.main/repl/read-eval-print/fn
> >                   main.clj:  242  clojure.main/repl/read-eval-print
> >                   main.clj:  260  clojure.main/repl/fn
> >                   main.clj:  260  clojure.main/repl
> >                   main.clj:  176  clojure.main/repl
> >                RestFn.java: 1523  clojure.lang.RestFn/invoke
> >     interruptible_eval.clj:   87
> >  clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn
> >                   AFn.java:  152  clojure.lang.AFn/applyToHelper
> >                   AFn.java:  144  clojure.lang.AFn/applyTo
> >                   core.clj:  657  clojure.core/apply
> >                   core.clj: 1963  clojure.core/with-bindings*
> >                   core.clj: 1963  clojure.core/with-bindings*
> >                RestFn.java:  425  clojure.lang.RestFn/invoke
> >     interruptible_eval.clj:   85
> >  clojure.tools.nrepl.middleware.interruptible-eval/evaluate
> >     interruptible_eval.clj:   55
> >  clojure.tools.nrepl.middleware.interruptible-eval/evaluate
> >     interruptible_eval.clj:  222
> >  clojure.tools.nrepl.middleware.interruptible-eval/
> interruptible-eval/fn/fn
> >     interruptible_eval.clj:  190
> >  clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn
> >                   AFn.java:   22  clojure.lang.AFn/run
> >    ThreadPoolExecutor.java: 1142
> >  java.util.concurrent.ThreadPoolExecutor/runWorker
> >    ThreadPoolExecutor.java:  617
> >  java.util.concurrent.ThreadPoolExecutor$Worker/run
> >                Thread.java:  745  java.lang.Thread/run
> > ```
> >
> >
> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> > Blog: http://stardiviner.github.io/
> >
> > On Sat, Jun 17, 2017 at 9:46 AM, Tim Cross <theophil...@gmail.com>
> wrote:
> >
> >>
> >> My guess is that cider is not finding the incanter package in the
> >> classpath when the first block attempts to evaluate. Another issue is
> >> that your not using any session options, so your two blocks will be
> >> evaluated in separate environments - not a real problem with your
> >> current example, but will be an issue if you expect to access incanter
> >> functions from separate babel blocks.
> >>
> >> There are a number of working parts which all need to be lined up
> >> correctly before babel clojure support will work correctly. Getting
> >> things to work when your just using core clojure functions is fairly
> >> trivial, but getting it to work when you have to pull in other
> >> dependencies can be a little tricky.
> >>
> >> You might find this article useful to get started
> >>
> >> http://fgiasson.com/blog/index.php/2016/06/21/optimal-
> >> emacs-settings-for-org-mode-for-literate-programming/
> >>
> >> I also notice you have not set the org-babel-clojure-backend, which you
> >> need to do. My recommendation would be to do the following
> >>
> >> 1. Create a leinegen project to experiment with i.e.
> >> lein new app my-kk
> >>
> >> 2. Make sure you can edit and evaluate clojure just using clojure-mode
> >> and cider in emacs
> >>
> >> 3. Add the incanter package to your project.clj dependencies key
> >>
> >> 4. Modify core.clj (using clojure-mode) to include the code in your
> >> clojure blocks and run with cider to make sure they work as expected.
> >>
> >> 5. Create the org file you want to experiment with in the root of your
> >> project. This should ensure that when you try to evaluate clojure
> >> blocks, the cider backend will be loaded with the dependencies in the
> >> project.clj file.
> >>
> >> 6. Copy the code in your core.clj file into ONE babel src block and see
> >> if you can get it to evaluate correctly. Experiment with the block
> >> configuration options like :output etc.
> >>
> >> 7. Break the code up into different blocks and experiment with block
> >> options, especially session options.
> >>
> >> Once you get to that point, you should be across the various moving
> >> parts with sufficient understanding to then look at how you can tweak
> >> things to get exactly the behaviour and workflow you want.
> >>
> >> HTH
> >>
> >> Tim
> >>
> >> numbch...@gmail.com writes:
> >>
> >> > When Org-mode buffer like this:
> >> >
> >> > #+BEGIN_SRC clojure
> >> > (ns my.kk
> >> >   (:require '[incanter.core :as kk]))
> >> > #+END_SRC
> >> >
> >> > #+BEGIN_SRC clojure
> >> > (print "hi")
> >> > (def kkkk "hello")
> >> > #+END_SRC
> >> >
> >> > #+RESULTS:
> >> >
> >> > When I have `(ns ..)` namespace clojure code in buffer, the second
> >> `(print
> >> > ..)` clojure result nothing. But when I remove the first src block,
> the
> >> > `(print ..)` clojure src block works fine.
> >> >
> >> > I'm using Org-mode version from `master` with `use-package` like this:
> >> >
> >> > (use-package org
> >> >   :load-path "~/Code/Emacs/org-mode/lisp/"
> >> >   :pin manual
> >> >   :mode (("\\.org$" . org-mode))
> >> >   :config
> >> >   (use-package org-plus-contrib
> >> >     :load-path "~/Code/Emacs/org-mode/contrib/lisp/"
> >> >     :pin manual)
> >> >   )
> >> >
> >> >
> >> > [stardiviner]           <Hack this world!>      GPG key ID: 47C32433
> >> > IRC(freeenode): stardiviner                     Twitter:  @numbchild
> >> > Key fingerprint = 9BAA 92BC CDDD B9EF 3B36  CB99 B8C4 B8E5 47C3 2433
> >> > Blog: http://stardiviner.github.io/
> >>
> >>
> >> --
> >> Tim Cross
> >>
>
>
> --
> Tim Cross
>

Reply via email to