new to clojure-py

Mon 30 July 2012
By KJ

In FP.

先讲什么LISP 7元素是不靠谱的, 太理论化了

我们从动手开始, 安装clojure-py有python即可

sudo easy_install clojure-py

用easy_install是担心有些人没有pip, 还是保守一点

安装好了以后clojurepy, 就可以进入交互的界面了, 和python一样

clojurepy

来些基本的

user=> (+ 1 2)
3

我也是新手, 找了一些文章来看看, 那些LISP老手应该对这些东西不会太陌生

http://lmf-ramblings.blogspot.sg/2012/03/quick-look-at-clojure-py.html

user=> (print "abc")
abcnil
user=> (println "abc")
abc
nil

于是我学会了打印和定义函数

user=> (defn abc [a b c] (+ a b c))
#'user/abc
user=> abc
#<function abc_auto_ at 0x100ed0b90>
user=> (abc 1 2 3)
6

有意思的是defn实际上是def和fn的组合词, def就是标准的赋值

user=> (def a 1)
#'user/a
user=> a
1

按照上面帖子的例子, 调用标准库也是必须的, 谁让我们如此热爱python的标准库呢?

user=> (ns tryclojure (:require math))
nil
tryclojure=> (math/cos 1.5)
0.0707372016677
tryclojure=> (math/cos (/ math/pi 4))
0.707106781187
tryclojure=> (math/log 1024 2)
10.0

我注意到当ns以后, 交互环境的命名空间也变了, 下面就是我自己的摸索了

tryclojure=> (user/ns test (:require random))
nil
test=>

原来自己不在ns命名空间下, 就无法调用ns, 所以强制指定user命名空间, 看似很管用哦

test=> (random/choice [1 2 3])
2
test=> (user/ns test (:require sys))
nil
test=> (print sys/argv)
['/usr/local/bin/clojurepy']nil

此时就可以一个一个加入你想要的模块

argv=> (user/ns user (:require sys))
nil
user=> (println sys/argv)
['/usr/local/bin/clojurepy']
nil

其实我们在这个阶段还不需要建立其他的命名空间, 所有到模块都导入初始的user空间吧

说句老实话, 我想不通为什么不允许直接导入lib到当前命名空间

user=> (user/ns user (:require tornado))
nil
user=> (println tornado)
<module 'tornado' from '/Library/Python/2.7/site-packages/tornado/__init__.pyc'>
nil

看到这里, 知道我在想什么了吧

我说过, 除非你写点东西, 否则休想学会这门语言

blogroll

social