ESPIER 一只JAVA程序猿的日常
拥有标签 clojure 的文章:

配置Clojure国内仓库

在项目中设置国内仓库

修改project.clj,参考如下内容进行设置

(defproject project-name 
  :dependencies [[org.clojure/clojure "1.10.0"]]
  
  :repositories [["central" "http://maven.aliyun.com/nexus/content/groups/public"]
                 ["clojars" "https://mirrors.tuna.tsinghua.edu.cn/clojars/"]])
 
;; 这个是官方的启用非严格检查方案
(require 'cemerick.pomegranate.aether)
(cemerick.pomegranate.aether/register-wagon-factory!
 "http" #(org.apache.maven.wagon.providers.http.HttpWagon.))

clojure读书笔记其四

这个系列还会继续的

忽然发现我之前已经建立了这篇博客,心想姑且把这篇完成吧,后续更高级的内容等我琢磨明白了再放出来。这个系列并不是一个单纯学习教程,更是我对Clojure认知的一种体现吧,说实话从java这种语言跳到clojure上还是有挺多问题的,至少思维方式可能就需要进行蛮大的转变,后续估计还会在读一些SICP之类的内容去逐渐加深自己对于LISP这个深坑的理解。

说一说常用的东西

这一节就来说一说常用的一些函数,在实际的应用中不论是刷题还是实际的开发应用,都会经常的用到,比如递归 map reduce apply 等等,这些都是接触clojure之后都会经常看到,用到的方法。那么,今天就来说说这些吧。

递归

递归的话在一般的语言中(没错,我说的就是Java),一般都会采用这种方式:

  public int doMethod(int param){
    // do something
    doMethod(param);
  }

在方法内部调用方法本身实现递归,完成方法的递归调用。
然而,在clojure中这种方式虽然可以,但却会造成堆栈的溢出(因为Clojure的尾递归优化不是用的原函数名,而是使用的recur,使用原函数名会不断产生新的实例从而造成堆栈溢出)。

配置lein的私有依赖仓库

lein与私有仓库

lein在new一个新的项目的时候都会从maven或者clojars上下载对应的依赖,但是一旦你离开了互联网环境只有一个maven私服的时候,这一切就变得不是那么美好了。因此,我们需要配置一下lein,让它能够从我们指定的位置下载依赖。

创建profiles.clj

在$HOME/.lein/下创建profiles.clj文件,在其中添加如下内容:

clojure学习笔记其三

Namespace

名称空间对于Clojure来说是一个逻辑上对于代码进行分组的概念,类似于Java的package,通过使用名称空间能够规避方法名冲突,有效的对代码进行管理。主要应用的话,其实就是方便代码的引入和使用了,毕竟你不可能将所有代码放到一个clj文件中。

create-ns

user> (create-ns 'clojure.by.example)
nil

这样一个名称空间就建立好了,是不是so easy!

in-ns

;; create the namespace and switch to it
(in-ns 'first-namespace)

in-ns的主要作用是切换到指定的namespace中,如果这个namespace不存在,则会创建他。

clojure学习笔记其二

今天的主题是Function

正如标题所言,今天这篇笔记的主题是function,当然也就是lisp语言中的一等公民,“函数"啦XD

那么直入主题,首先来看一下怎么定义一个函数:

;;    name   params         body
;;    -----  ------  -------------------
(defn greet  [name]  (str "Hello, " name) )

这里我引用了官方文档中的说明。

那么这个函数的使用就可以像上一篇中所说的那样:

user=> (greet "小明")
"Hello, 小明"

你也可以给你的方法增加方法说明:

(defn greet  
  "this is the greet function for you"
  [name]  
  (str "Hello, " name))

clojure学习笔记其一

简述

  学习clojure的起因主要还是想学习lisp语言吧。由于既想学lisp现阶段又无法脱离jvm这个大的框架,所以就发现了clojure语言,然后就踏上了“自虐”的不归路:D

学习思路

  在刚开始学习的过程中,我看了很多相关的教程、博客,但总是感觉不得其门而入,简单来说就是找不到这门语言的学习思路。大体是因为clojure和传统的C type语言思路不同吧,再加上语法糖太多,导致各种磕磕碰碰。仔细想想,还是整理一下目前所学,也希望整理的东西能给clojure的初学者提供一定的帮助。
  本系列的笔记是基于官方文档整理、补充的,如有错漏,请在评论区指出,以便及时进行修改,也有助于我自身的提升和进步。

语言学习的第一步

没错,就是Hello World!

user=> (println "Hello, Clojure!")
Hello, Clojure!
nil

这一句是在repl中执行的,哦,差点忘了,记得安装lein哦,至于怎么装请自行百度,如果需要梯子,emmmmm,自己想办法吧,程序员或者想成为程序员的人不应该被一面墙阻拦(有人敲门,我去开一下,Σ(っ °Д °;)っ好像有哪里不对)

言归正传,输出的结果是“Hello, Clojure!”,但方法的返回值是nil,这个输出其实就是函数println的副产物。