原址

作为当今最主流的运算平台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相关推荐

  1. Clojure学习笔记(一)——介绍、安装和语法

    Clojure学习笔记(一)--介绍.安装和语法 什么是Clojure Clojure是一种动态的.强类型的.寄居在JVM上的语言. Clojure的特性: 函数式编程基础,包括一套性能可以和典型可变 ...

  2. Chrome Extension in CLJS —— 搭建开发环境

    前言  磨刀不误砍柴工,本篇将介绍如何搭建Chrome插件的ClojureScript开发环境. 具体工具栈:vim(paredit,tslime,vim-clojure-static,vim-fir ...

  3. (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)

    前言  书接上一回,在了解cljs基本语法后并在clojurescript.net的奇特错误提示后,我们必须痛定思痛地搭建一个本地的开发环境,以便后续深入地学习cljs. 现有的构建工具  由于浏览器 ...

  4. Hello IDEA

    Scala-SBT 首先安装scala插件. 在13+版本中已经默认有SBT插件. 新建一个Project, 选择基于SBT的Scala项目方式创建 下一步选择JDK和SBT, Scala的版本. 点 ...

  5. Clojure 入门

    我将尝试教一些人(主要是Python开发者,在OS X操作系统运行)如何使用Clojure, 因为我觉得目前已经存在的一些教人如何从零开始学习Clojure的文档不尽如人意. 当我自己在几个月前亲身经 ...

  6. Clojure程序设计

    <Clojure程序设计> 基本信息 作者: (美)Stuart Halloway Aaron Bedra [作译者介绍] 出版社:人民邮电出版社 ISBN:9787115308474 上 ...

  7. 《Clojure数据分析秘笈》——2.6节调整词频值的度量

    本节书摘来自华章社区<Clojure数据分析秘笈>一书中的第5章,第2.6节调整词频值的度量,作者(美)Eric Rochester,更多章节内容可以访问云栖社区"华章社区&qu ...

  8. 对《Clojure in Action》第二版的书评与作者问答

    由Amit Rahore及Francis Avila撰写,Manning出版的<Clojure in Action>第二版以本质性的.通透的.结构组织良好的方式对Clojure 1.6进行 ...

  9. Clojure入门指南(Getting Started)

    Clojure入门指南 http://clojure.org/getting_started 快速开始 要求Java 1.5或者更高版本(JavaSDK). 下载(http://clojure.org ...

最新文章

  1. 人脸识别遇难题,平台先行破局
  2. go语言使用go-sciter创建桌面应用(八) 窗口显示时,自动加载后端数据。
  3. L2-003 月饼-团体程序设计天梯赛GPLT
  4. IOS开发设置应用程序App启动图片
  5. 20210307:力扣第231周周赛(上)
  6. c语言popen函数多线程,关于多线程:多线程环境中的Python-Subprocess-Popen行为不一致...
  7. java代码实现读写txt文件(txt文件转换成java文件)
  8. php实现微信登录详细教程,[文档教程]PHP实现微信开放平台扫码登录源码下载 - 技术编程 - 极思维...
  9. axios拦截器_77.9KStar 的 Axios 项目有哪些值得借鉴的地方
  10. Excel将数据内容导出为数据库DBF文件的操作
  11. 实验一:Guass列选主元消去法之C语言代码
  12. 计算机时间单位,时间计算机单位之间的换算
  13. orientation
  14. Android开发 应用软件更新通用方式--强制/非强制/远程控制/浏览器 更新
  15. 445端口被封之后,在公网实现smb文件共享
  16. 学习总结1-跟开涛学SpringMVC
  17. 2021-2027全球与中国5G核心网市场现状及未来发展趋势
  18. java joda time_使用Joda-Time优雅的处理日期时间
  19. 批量进行数字变下标的处理
  20. 西瓜中视频是如何赚钱的?教你提高视频收益的3个方法!

热门文章

  1. server2003虚拟机损坏后的文件找回
  2. Druid、C3P0、Tomcat Pool的性能测试与选型
  3. python查询注册表子项是否存在并操作
  4. Loonframework-DAO-Alpha-0.1.0发布
  5. 分享一些很不错的学习资源网站
  6. CodeWithMosh--mysql 学习笔记(4) -- 相关数据类型
  7. ios 自定义拍照页面_30分钟搞定iOS自定义相机
  8. 程序员面试技巧:如何讲解自己做过的项目
  9. java程序本质,方法学之Java的本质
  10. k8s部署zabbix_Kubernetes 中部署 Zabbix