I see, thanks very much. [stardiviner] 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 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 > > numbchild@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] 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 > 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 > >> > >> numbchild@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] 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 >