文档章节

Clojure 101

princeicelk
 princeicelk
发布于 2016/07/20 14:46
字数 433
阅读 106
收藏 0

这里我们写两个小程序练习Clojure语言的基本功能。第一个是寻找N以内的质数,第二个尝试着给一些文档做单词索引。本身程序都没有太多实用意义,仅仅是练习语言。

Prime Number

Find the prime numbers. 寻找N以内的质数

Solution 1 方案1比较直接,两重循环便利。

    (def n 20)
    (doseq [i (range 2 n)]
    	(def f true)
    	(doseq [j (range 2 i)]
    		(if (= (mod i j) 0)
     			(def f false)
     		)
     	)
     	(if f (println i))
    )

Solution 2 第二个方案Clojure写出来很小巧,不解释,看得懂的自然看得懂,O(n) = n;

(def nn (range 2 n))
(while (> (count nn) 0)
	(let [i (first nn)]
		(println i)
		(def nn (remove #(= (mod % i) 0) nn))
	)
)

Index Engine

Index a set of documents 给一系列文档做索引。

这里的索引是在内存的一个概念而已,无非就是组织成一个已word为key的map.

(defn index
	"indexing documents"
	[docs]
	(
		(def word-map {})
		(doseq [d docs]
			(def words (clojure.string/split d #"\s"))
			(doseq [word words]
			 (def v (word-map word))
		    (if (nil? v)
		      (def v [])
		    )
		    (def v (conj v d))
		    (def word-map (assoc word-map word v))
			)
		)
		word-map
	)
)

(def docs [
	"we are engineer" 
	"David is a French engineer" 
	"There are a lot of French people in our company"
	"we need more engineer in our company"
])
(index docs)

写在后面

Lisp/Clojure语法是反人类的, 前置操作符的语序需要一些时间来适应。而对初学者最耗时间的是,总是会忘记所有的clojure集合是不可修改的。

by ICE

© 著作权归作者所有

上一篇: Storm 101
princeicelk
粉丝 16
博文 21
码字总数 17123
作品 0
静安
CTO(技术副总裁)
私信 提问
加载中

评论(1)

apple007
apple007
(def nn (remove #(= (mod % i) 0) nn))

这一步 算不算是 O(n) 的呢? 不懂哈, 纯属求教!
Clojure实现协同过滤原型

本文是学习clojure的过程中写的第一个小程序,功能很简单,第一次使用clojure实现自己的想法,特此记录。数据文件如下: 101,1101,2102,1102,3103,2104,4104,1104,5 左列是item id,右列是u...

mahengyang
2014/04/30
0
0
LINQ 的 Java 示例--java-linq-examples

java-linq-examples 是 101 个 LINQ 示例的 Java 移植版本。Android 兼容 Java 1.7. 此外还有以下语言移植版本: Swift Clojure Dart...

叶秀兰
2015/08/04
684
0
4Clojure hard题目-101

4Clojure是一个面向clojure初学者的在线答题网站,问题从易到难,一步步辅助初学者深入了解clojure Levenshtein Distance Difficulty: Hard Topics: seqs Given two sequences x and y, cal...

池塘仙人
2012/11/19
371
0
Scala 技术周刊 | 第 26 期

这里有最新的 Scala 社区动态、技术博文。 微信搜索 「scalacool」关注我们,及时获取最新资讯。 深度阅读 Isn't Scala unnecessarily complicated? Scala 是否过度设计了? Typesafety 101...

ScalaCool
2017/11/09
0
0
[图表] 每种编程语言的平均收入

几周前我提到过如何通过使用git的提交元数据(metadata)和Rapleaf API 来收集Github上热门组织的一些统计资料(日志, 每个组织的数据)。现在我又对这些数据按编程语言而不是组织进行划分产生了...

oschina
2013/08/22
11.9K
80

没有更多内容

加载失败,请刷新页面

加载更多

前嗅教程:如何获取精准客源,提高销量

经常有人问嗅嗅,我是XX行业的,大数据能帮我做什么? • 可以给我带来客源吗? • 可以提高我的销量吗? • 可以增加我的利润吗? 今天嗅嗅就以生鲜供货为例,为大家讲一讲外卖平台那些事~...

forespider
30分钟前
1
0
浮窗插件

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>移动窗口</title> <style> body { margin: 0; padding: 0; width: 100%; height: 1000px; background: #eee; } /*示......

流年那么伤
34分钟前
2
0
关于 Jenkins master 共享 JENKINS_HOME 目录的实验

本文首发于:Jenkins 中文社区 作者:翟志军 审校:王冬辉,linuxsuren Jenkins master 的高可用是个老大难的问题。和很多人一样,笔者也想过两个 Jenkins master 共享同一个 JENKINS_HOME 的...

Jenkins中文社区
42分钟前
3
0
【重构】Spring Cloud OAuth 无Token调用源码封装

背景 重构-改善既有代码的设计,重构的目的是是软件更容易被理解和修改。 书接上回Spring Security OAuth 微服务内部Token传递的源码解析,本篇主要无token 调用过程中,代码的不断完善及其重...

冷冷gg
48分钟前
49
0
watchOS更新后 Apple Watch 4心电图功能已开始支持欧洲用户

苹果在发布 Apple Watch 4 系列时也发布了 ECG(心电图)功能,但这项功能仅适用于在美版 Apple Watch。对于其他地区的用户来说,访问该功能的唯一途径是在美国购买该设备。不过当 watchOS ...

linuxCool
57分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部