clojure学习(1)——判断语句

原创 2017年04月16日 20:47:02

clojure是操作符前缀的语言。

为单行注释

nil相当于Java里面的null,if判断里面的false

if语句除了false和nil,其他都为true,如果else后面没内容,为false时就返回nil。

user=> (defn is-small [number] (if (< number 100) "yes" "no"))
#'user/is-small
user=> (is-small 20)
"yes"
user=> (is-small 150)
"no"
user=> (defn is-small [number] (if (< number 100) "yes" ))
#'user/is-small
user=> (is-small 110)
nil

if-not:和if相反的判断

user=> (if-not (zero? 0) "no" "yes")
"yes"
user=> (if-not (zero? 123) "no" "yes")
"no"

if-let 用法:第一个参数为绑定变量,第二个参数为表达式。并根据第二个表达式参数返回的值确定执行then、else语句。

user=> (defn if-let-test [arg] (if-let [x arg] "true" "false"))
#'user/if-let-test
user=> (if-let-test 1)
"true"
user=> (if-let-test nil)
"false"
user=> (if-let-test false)
"false"

when

当不为false或nil时才执行后面的语句,否则返回nil

user=> (when false (println "is true") "return true")
nil
user=> (when false (println "is true") "return true" "return false")
nil
user=> (when true (println "is true") "return true" "return false")
is true
"return false"
user=> (def has-value (when true (println "ni hao") "returned value"))
ni hao
#'user/has-value
user=> has-value
"returned value"

when-not

为false或nil时候才执行后面语句,否则返回nil

user=> (when-not false (println "is false") "return true" "return false")
is false
"return false"
user=> (when-not false (println "is false") (println "return true") "return false")
is false
return true
"return false"

when-let

类似if-let,当绑定变量部位false或nil才执行后面语句,否则返回nil

user=> (when-let [a true] (println "true") "return true")
true
"return true"
user=> (when-let [a false] (println "true"))
nil
user=> (when-let [a nil] (println "true"))

cond

类似Java里面的switch-case-default语句

user=> (defn f [n] (cond (< n 0) "<0" (< n 10) "<10" :else ">=10"))
#'user/f
user=> (f -56)
"<0"
user=> (f 56)
">=10"
user=> (f 156)
">=10"
user=> (f 6)
"<10"

case

类似switch里的case

user=> (let [mystr "ni hao"]
(case mystr
"" 0
"ni hao" (count mystr)))
6
user=> (let [mystr "no one"]
(case mystr
"" 0
"ni hao" (count mystr)
"default"))
"default"

多值匹配

user=> (defn f [x] (case x
(5 10) "*5"
(3 6 9) "*3"
"others"))
#'user/f
user=> (f 5)
"*5"
user=> (f 10)
"*5"
user=> (f 3)
"*3"
user=> (f 11)
"others"

do

执行多条语句,返回最后一条语句值

user=> (def v (do (println 123) (println 321) (println 543) 23 0))
123
321
543
#'user/v
user=> v
0
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/loongago/article/details/70197924

Clojure 学习入门(15)—— 条件判断

一、标准的流程控制 if: 将一个判断表达式作为它的第一个参数进行求值。如果求值为true,那么就返回它的第二个参数(相当于“then”子句)的求值结果。如果结果为false(包括nil)就返回第三个...
  • sunboy_2050
  • sunboy_2050
  • 2014-01-08 23:12:00
  • 12772

clojure学习(1)——判断语句

clojure是操作符前缀的语言。;为单行注释nil相当于Java里面的null,if判断里面的falseif语句除了false和nil,其他都为true,如果else后面没内容,为false时就返回...
  • loongago
  • loongago
  • 2017-04-16 20:47:02
  • 474

Clojure介绍、安装和语法

原文地址:http://www.cnblogs.com/fengzhiwu/p/5608658.html 什么是Clojure Clojure是一种动态的、强类型的、寄居在JVM上的语言。...
  • tanga842428
  • tanga842428
  • 2016-10-18 09:31:32
  • 615

Clojure中Vector和List的区别及其相关函数

Clojure是一门动态类型的语言,运行时才会做类型检查。它也不会像java这种面向对象编程语言,再调用一个对象的函数时,首先这个函数必须是属于某个对象的函数,否则检查报错。所以对于clojure中的...
  • zdplife
  • zdplife
  • 2016-08-13 17:13:55
  • 1289

理解clojure语法(2)

注:本文长期更新 本文梳理一些clojure的常用知识点,惯用法?maybe 1.#'表示取得变量对象本身,var-quote (#') #'x ⇒ (var x)这是#的一个reader宏,作用...
  • yin_wuzhe
  • yin_wuzhe
  • 2016-07-08 20:10:52
  • 2364

理解clojure语法(1)

然后counter被绑定到匿名函数`#(swap! tick inc)`的地址。 当counter绑定完之后,每次调用counter :`(counter)` 解释器就会找到counter ,也就是匿...
  • yin_wuzhe
  • yin_wuzhe
  • 2016-05-04 21:58:42
  • 965

逻辑编程在clojure中的应用:clojure.core.logic

1. 逻辑编程思维:  逻辑编程(逻辑程序设计)是种编程范型,它设置答案须匹配的规则来解决问题,而非设置步骤来解决问题。过程是: 事实+规则=结果   简单的说,事实就是一些已知输入,规则是应该遵...
  • zdplife
  • zdplife
  • 2016-07-30 18:04:09
  • 1054

最简单判断系统大小端

1 第一点,先要明白一个,就是系统在申请内存的时候,是从高地址到低地址还是从低地址到高地址。 先用下面一个简单的程序来判断申请的内存地址顺序问题。下面是一个典型的内存结构图。 我们用下面这个程...
  • u010164190
  • u010164190
  • 2016-09-19 17:33:38
  • 1290

Clojure入门教程

转载自网址:  http://xumingming.sinaapp.com/302/clojure-functional-programming-for-the-jvm-clojure-tutoria...
  • caodaoxi
  • caodaoxi
  • 2012-11-18 00:32:07
  • 970
收藏助手
不良信息举报
您举报文章:clojure学习(1)——判断语句
举报原因:
原因补充:

(最多只允许输入30个字)