定制clojure的REPL
原址
作为当今最主流的运算平台JVM,把函数式编程语言引入JVM也是很多人尝试的方向,Clojure就是其中之一。Clojure是一个在JVM平台运行的动态函数式编程语言,其语法于类似LISP语言,在JVM平台运行的时候,会被编译为JVM的字节码进行运算。
诞生于2007年的Clojure是JVM平台上的Lisp实现,Lisp 以强大的功能和表达性而著称,但应用范围存在着固定的局限,于是发起人Rich Hickey设计Clojure的初衷便是希望得到一门能够服务于高并发应用场景,较Lisp更为先进的函数式编程语言。
Clojure保持了函数式语言的主要特点,例如immutable state,Full Lisp-style macro support,persistent data structures等等,并且还能够非常方便的调用Java类库的API,和Java类库进行良好的整合。
因为一些常用函数需要REPL中可用,所以定制了clojure的REPL.
%cat bin/myclj
#!/bin/sh
breakchars="(){}[],^%$#@\"\";:''|\\"
MY_LIB =/home/sw2wolf/lib #自己的CLJ文件放此处
CLOJURE_JAR=/usr/share/clojure/clojure.jar
CONTRIB_JAR=/usr/share/clojure/clojure-contrib.jar
CP="$CLOJURE_JAR:$CONTRIB_JAR:$ MY_LIB "
if [ $# -eq 0 ]; then
exec rlwrap --remember -c -b "$breakchars" \
-f "$HOME"/ .clj_completions \
java -cp $CP clojure.main -i ~/ .clojurerc -r
else
exec java -cp $CP clojure.main $1 -- "$@"
fi
在Clojure的REPL中,运行如下代码:
( def completions ( reduce concat ( map ( fn [ p ] ( keys ( ns-publics ( find-ns p ) ) ) ) ' ( clojure . core clojure . set clojure . xml clojure . zip ) ) ) )
( with-open [ f ( java . io . BufferedWriter . ( java . io . FileWriter . ( str ( System/getenv "HOME" ) "/.clj_completions" ) ) ) ] ( . write f ( apply str ( interleave completions ( repeat "\n" ) ) ) ) )
这会在你的主目录生成.clj_completions 文件, 用来自动补齐。
%head -10 .clj_completions
sorted-map
read-line
re-pattern
keyword?
val
chunked-seq?
find-protocol-impl
vector-of
object-array
*compile-path*
%cat .clojurerc
( set ! *warn-on-reflection* true)
( use 'money)
money中就有日常用的一些函数:
%head -30 ~/lib/money.clj
( ns money
(: import (java.util Date Timer Random)))
( def SXF 0.0015) ;手续费
( def YHS 0.001) ;印花费
( def GHF 1.0) ;过户费
( defn winG [qty pb ps]
"算股票盈利"
(- (* qty ps (- 1 SXF YHS)) (* 2 GHF) (* qty pb (+ 1 SXF))))
( defn winQ [qty pb ps]
"算权证盈利"
(- (* qty ps (- 1 SXF)) (* 2 GHF) (* qty pb (+ 1 SXF))))
( defn stopLoss [qty pb lossRate]
"止损价"
( let [t (* qty pb (+ 1 SXF))]
( println ( format "Stop Loss at:%.2f" (- pb (/ (* t lossRate) qty))))
( println ( format "Lost Money:%.2f" (* t lossRate)))))
(defn sys [cmd]
"执行SHELL命令"
(let [cmdList (clojure.string/split cmd #"\s")
{:keys [exit out err]} (apply clojure.java.shell/sh cmdList)]
(if (= 0 exit) (println out) (println err))))
%myclj
Clojure 1.2.1
user=> (winG 1000 7.18 8.18)
966.7799999999997
定制clojure的REPL相关推荐
- Clojure学习笔记(一)——介绍、安装和语法
Clojure学习笔记(一)--介绍.安装和语法 什么是Clojure Clojure是一种动态的.强类型的.寄居在JVM上的语言. Clojure的特性: 函数式编程基础,包括一套性能可以和典型可变 ...
- Chrome Extension in CLJS —— 搭建开发环境
前言 磨刀不误砍柴工,本篇将介绍如何搭建Chrome插件的ClojureScript开发环境. 具体工具栈:vim(paredit,tslime,vim-clojure-static,vim-fir ...
- (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
前言 书接上一回,在了解cljs基本语法后并在clojurescript.net的奇特错误提示后,我们必须痛定思痛地搭建一个本地的开发环境,以便后续深入地学习cljs. 现有的构建工具 由于浏览器 ...
- Hello IDEA
Scala-SBT 首先安装scala插件. 在13+版本中已经默认有SBT插件. 新建一个Project, 选择基于SBT的Scala项目方式创建 下一步选择JDK和SBT, Scala的版本. 点 ...
- Clojure 入门
我将尝试教一些人(主要是Python开发者,在OS X操作系统运行)如何使用Clojure, 因为我觉得目前已经存在的一些教人如何从零开始学习Clojure的文档不尽如人意. 当我自己在几个月前亲身经 ...
- Clojure程序设计
<Clojure程序设计> 基本信息 作者: (美)Stuart Halloway Aaron Bedra [作译者介绍] 出版社:人民邮电出版社 ISBN:9787115308474 上 ...
- 《Clojure数据分析秘笈》——2.6节调整词频值的度量
本节书摘来自华章社区<Clojure数据分析秘笈>一书中的第5章,第2.6节调整词频值的度量,作者(美)Eric Rochester,更多章节内容可以访问云栖社区"华章社区&qu ...
- 对《Clojure in Action》第二版的书评与作者问答
由Amit Rahore及Francis Avila撰写,Manning出版的<Clojure in Action>第二版以本质性的.通透的.结构组织良好的方式对Clojure 1.6进行 ...
- Clojure入门指南(Getting Started)
Clojure入门指南 http://clojure.org/getting_started 快速开始 要求Java 1.5或者更高版本(JavaSDK). 下载(http://clojure.org ...
最新文章
- 人脸识别遇难题,平台先行破局
- go语言使用go-sciter创建桌面应用(八) 窗口显示时,自动加载后端数据。
- L2-003 月饼-团体程序设计天梯赛GPLT
- IOS开发设置应用程序App启动图片
- 20210307:力扣第231周周赛(上)
- c语言popen函数多线程,关于多线程:多线程环境中的Python-Subprocess-Popen行为不一致...
- java代码实现读写txt文件(txt文件转换成java文件)
- php实现微信登录详细教程,[文档教程]PHP实现微信开放平台扫码登录源码下载 - 技术编程 - 极思维...
- axios拦截器_77.9KStar 的 Axios 项目有哪些值得借鉴的地方
- Excel将数据内容导出为数据库DBF文件的操作
- 实验一:Guass列选主元消去法之C语言代码
- 计算机时间单位,时间计算机单位之间的换算
- orientation
- Android开发 应用软件更新通用方式--强制/非强制/远程控制/浏览器 更新
- 445端口被封之后,在公网实现smb文件共享
- 学习总结1-跟开涛学SpringMVC
- 2021-2027全球与中国5G核心网市场现状及未来发展趋势
- java joda time_使用Joda-Time优雅的处理日期时间
- 批量进行数字变下标的处理
- 西瓜中视频是如何赚钱的?教你提高视频收益的3个方法!