clojure

ちょいとjuliaに秋田ので、久しぶりにOpenBSDを立ち上げた。

そしてぶらぶらと/usr/ports/lang/を見ていたら、clojureなんてのが出ていた。 それって、javaを下敷きにした新風なlispだよな。そんなのOpenBSDで動くのか? まあ、動くから登録されているんだろうけど。

念の為にjavaを探してみると、それっぽいのが無い。でもまあいいか。

Clojure

を見るとjavaが入ってる事を前提にしてclojureをインストールしてる。

まあ、portsから入れれば、javaもきっと釣られて入ってくるだろう。入れてみた。 そして、cljってのが楽そうなので起動。

ob$ clj
Couldn't find 'java'. Please set JAVA_HOME.

ホェー、環境設定が必要なのか。

ob$ export JAVA_HOME=/usr/local/jdk-1.8.0
ob$ clj
Clojure 1.10.0 
user=> 

動いた。よかったね。

まてまて、裸で使うのは寒いぞ。少なくとも、 clojure-mode や cider それに、 Leiningen ぐらいは入れておけよ。こういうのは幾らなんでも、portsには無いだろうから。

Leiningen Tutorial を見ると、juliaで言うPkgの開発用なのね。

clojure衆の溜まり場は、ここか。 Community Resources

兎も角、leinを入れた。こやつはjavaのPATHが必要そうなので、先に設定する。

ob$ PATH=$JAVA_HOME/bin:$PATH
ob$ lein repl
nREPL server started on port 35366 on host 127.0.0.1 - nrepl://127.0.0.1:35366
REPL-y 0.4.3, nREPL 0.6.0
Clojure 1.10.0
OpenJDK Server VM 1.8.0_202-b08
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

user=>

ここまで動けば、Linuxのそれと遜色ないな。

最近の事情を余り知らないので、フリークに訪ねてみる。

Clojure/ClojureScript関連リンク集

Clojure の日本語ガイド

そうか、補完をするには、companyが良いらしい。

(use-package company
  :config
  (global-company-mode)
  (setq company-idle-delay 0.1
        company-minimum-prefix-length 2
        company-selection-wrap-around t)

  (bind-keys :map company-mode-map
             ("C-i" . company-complete))
  (bind-keys :map company-active-map
             ("C-n" . company-select-next)
             ("C-p" . company-select-previous)
             ("C-s" . company-search-words-regexp))
  (bind-keys :map company-search-map
             ("C-n" . company-select-next)
             ("C-p" . company-select-previous)))

こやつを動かすには、use-packageって言うパッケージが必要になるんで、先にelpaに行って入れておく事。

pareditも入れておけとな。ParEdit チュートリアル

(use-package paredit
  :config
  (bind-keys :map paredit-mode-map
             ("C-h" . paredit-backward-delete)))

(use-package clojure-mode
  :init
  (add-hook 'clojure-mode-hook #'paredit-mode)
  ;; 略
  )

ciderを動かしてclojureと接続されていると、下記のように便利に使えるとな。

cider-jack-in (C-c M-j)
  REPLに接続します。日々ここから作業スタートです。

cider-eval-last-sexp (C-x C-c  or C-c C-c)
  現在カーソルのあるフォームを評価します。

cider-load-buffer (C-c C-k)
  名前空間(ファイル全体)を評価します。

cider-pretty-print (C-u C-c C-p)
  評価した結果をデータ構造が見やすいように表示してくれます。

cider-interrupt  (C-c C-b)
  評価を中断させる

こちらにあんちょこが、CIDER Quick-Reference Card

こちらは、開発例かな。 Clojure 完全マスター with Emacs/Cider-mode

Clojureのマクロとclojure.specのある未来

good job

ニューラルネットの学習過程を雑にグラフ化してみた へぇ、面白い物を見つけたな。

ニューラルネットワークが任意の関数を表現できることの視覚的証明

これ以外にも詳細な説明が有るので見ておくと吉。違う分野に手を出すと、知識が拡がるなあ。 井の中の蛙は、いかんぜよ。

An Overview of the clj-ml API

そして、clojure用のjupterだな。

ブラウザ上でデータ分析が出来る!Clojure/Gorilla入門

Gorilla REPL

gorilla

debian:tmp$ lein new app gorilla
Generating a project called gorilla based on the 'app' template.
debian:tmp$ cd gorilla/
debian:gorilla$ emacs project.clj
debian:gorilla$ lein gorilla
clojure.lang.Compiler$CompilerException: Syntax error macroexpanding clojure.core/ns at (ring/util/mime_type.clj:1:1).
#:clojure.error{:phase :macro-syntax-check, :line 1, :column 1, :source "ring/ut
il/mime_type.clj", :symbol clojure.core/ns}
 at clojure.lang.Compiler.checkSpecs (Compiler.java:6971)
  :
    clojure.lang.Var.applyTo (Var.java:705)
    clojure.main.main (main.java:37)

早速エラーの返礼。

debian:repository$ pwd
/home/sakae/.m2/repository
debian:repository$ ls
ch/                clout/               gorilla-repl/  org/
cheshire/          com/                 grimradical/   reply/
cider/             commons-codec/       http-kit/      rewrite-clj/
cljfmt/            commons-fileupload/  javax/         rewrite-cljs/
clj-http/          commons-io/          jline/         ring/
clj-http-lite/     commons-logging/     joda-time/     slingshot/
clj-stacktrace/    compojure/           lein-gorilla/  tigris/
clj-time/          gorilla-plot/        net/           trptcolin/
clojure-complete/  gorilla-renderable/  nrepl/

ringって、ここに置いてある物と違うのかな? javaも同時に見ないといけないのは辛い商売だな。

clojure on Debian

64Bit機ではどうかと clojureを入れてみる。jdkが多分必要だろうと思って、 default-jdk を入れた。

sakae@debian:/tmp$ javac -version
javac 11.0.4
sakae@debian:/tmp$ java -version
openjdk version "11.0.4" 2019-07-16
OpenJDK Runtime Environment (build 11.0.4+11-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.4+11-post-Debian-1deb10u1, mixed mode, sharing)

ciderが何だか取り下げられていてインストール出来ない。nREPLからpREPLへでも移行するんで、一時閉店なのかな?

ゴリラもnREPLの影響を受けるようで、こんなのを指定するといいよとの事だけど、

  :plugins  [[org.clojars.benfb/lein-gorilla "0.6.0"]]

ちゃんとするまで待つか。わたしーー待つわよ。

また32Bit機に戻ってきて

debian:gorilla$ lein gorilla :ip xxx.xxx.xxx.xxx :port 12345
Gorilla-REPL: 0.6.0
Unable to reach update server.
Started nREPL server on port 38285
Running at http://xxx.xxx.xxx.xxx:12345/worksheet.html .
Ctrl+C to exit.

on firefox

Gorilla REPL

Welcome to gorilla :-)

Shift + enter evaluates code. Hit alt+g twice in quick succession or click
the menu icon (upper-right corner) for more commands ...

It's a good habit to run each worksheet in its own namespace: feel free to
use the declaration we've provided below if you'd like.


1 (ns divine-stream
2    (:require [gorilla-plot.core :as plot]))

etc

Clojure/Incanter/clj-mlでデータマイニング入門

いまどきのClojureのはじめかた

ClojureScript クイックスタート

プロジェクトを作らないClojure

Pure Clojureによるコンピュータビジョン

Scheme in Clojure