Lisp语言:条件判断

学习了Lisp语言的控制台输出与输入,让我们来看看Lisp语言的条件判断。

Lisp中的条件判断看起来和其它语言差不多,学习起来还是比较简单的。

1. 基本用法:

基本的用法像下面这个样子:

(if          条件判断                条件成立时的结果           条件不成立时的结果)

我把其中的空间加长了,看起来比较清晰,反正Lisp对一个空格和多个空格的处理是一样的。

按上面的用法,Lisp中实际使用if类似于下面这样:

(if (> 3 2)  "messagea" "messageb")

上面语句判断3是否大于2,如果3大于2的话会返回“messagea”,否则会返回“messageb”

3当然大于2啦,所以上面的语句会返回“messagea”,你可以启动Clisp,输入以上代码进行测试。



2. 省略第四个元素

条件判断语句中的第四个元素是可以省略的,可以写成下面这样:

(if          条件判断                条件成立时的结果 )

比如你可以将语句写成这样:

(if (> 3 2)  "messagea" )

执行后会返回“messagea”

如果条件不成立,则CLisp会返回NIL

如下面这样的语句会返回NIL

(if (< 3 2)  "messagea" )

因为3<2这样的条件不成立,所以CLisp会返回NIL



3. T 和 NIL


那么,NIL是什么呢?NIL是Lisp里的“false”。

对应的,T是Lisp离得“true”。

所以下面第一个语句返回“message A”,而第二句语句返回的是“message B”。

(if T “message A” "message B")

(if NIL "message A" "messageB")
另外,在Clisp里,除了NIL以为,其它所有合法的元素都被当作是T,比如下面的语句也会返回“message A”

(if   "just a string" “message A” "message B")




4. 有关else if

其它语言里的条件判断语句都有if () else if ()这样的用法,在第一个条件不满足是进一步判断第二个条件,在Lisp里有没有对应的用法呢?

在Lisp里可以将第二个条件判断嵌套到第一个条件判断中来完成类似else if的判断,像下面这样:

(if          第一个条件判断                第一个条件成立时的结果           (if      第二个条件判断     第二个条件成立时的结果      第二个条件不成立的结果))

实际的使用类似于这样的:

(if          (<   a   10)        " a 小于10"        (  if     (<  a  20)   "  a 大于等于10,不过小于20"   "a 大于等于20"))

有编程经验的人可以从语句中清晰的看到程序执行的过程,该语句对a进行判断,如果a小于10则返回“a小于10”,如果a大于等于10则开始计算后面的结果,而后面的语句本身又是一个if判断,于是开始第二个条件判断的计算,这时如果a小于20则返回“a大于等于10,不过小于20”,否则返回“a大于等于20”。

这里面要注意的是后面的if是包含在一对括号里的,形成了嵌套关系,如果不加括号,写成下面这样会报错的:

(if          (<   a   10)        " a 小于10"          if     (<  a  20)   "  a 大于等于10,不过小于20"   "a 大于等于20")


5. 简单样例


现在让我们在上一篇文章的main方法里加一些条件判断,做个简单的样例。上一篇文章链接如下:
http://blog.csdn.net/keyboardota/article/details/7614545

修改后样例希望用户输入一个数字,然后对数字进行判断,看输入的数字是小于10,还是大于等于10,如果是大于等于10则进一步判断输入的数字是否小于20.

样例很简单,不过需要先解决一个问题,就是将用户输入的文本转换成数字,转换使用的是parse-integer函数,同时使用了:junk-allowed T参数,允许输入的文字不是数字,如果输入的不是数字的话该函数会返回NIL。

另外一点是Clisp环境中可以支持中文显示和中文变量名,写出来的函数如下:(不过有个善意的提醒,除非有一定必要,否则不要使用中文变量名,应为全角半角之类的原因容易打错,而且在VIM环境中输入中文不方便。)

(defun main ()

        (format *query-io* "请输入一个数字:")
        (force-output *query-io*)
        (setq 输入的内容 (read-line *query-io*))
        (setq 转换结果 (parse-integer 输入的内容 :junk-allowed T))
        (if 转换结果
                (format *query-io* "~a ~a ~%" "你输入的数字是:" 转换结果)
                (format *query-io* "亲!你输入的不是一个数字oh!~%"))
        (if (< 转换结果 10)
                (format *query-io* "输入的数字小于10~%")
                (if (< 转换结果    20)
                        (format *query-io* "输入的数字大于等于10,不过小于20~%")
                        (format *query-io* "输入的数字大于等于20~%")))
        (force-output *query-io*)

)




  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Lisp (List Processing Language) 是一种函数式编程语言,具有动态类型、高度可扩展性和可交互性。Lisp 的语法规则主要包括: 1. 基本语法结构:Lisp 使用括号来表示代码块的起始和结束,并使用前缀表示法来表示函数调用。例如: ``` (define (square x) (* x x)) (print (square 3)) ``` 2. 基本数据类型:Lisp 支持整数、浮点数、字符串、布尔值和符号等基本数据类型。 3. 变量:Lisp 使用 define 关键字来定义变量,使用 set! 关键字来修改变量的值。例如: ``` (define x 3) (set! x 4) ``` 4. 函数:Lisp 使用 define 关键字来定义函数,并支持高阶函数和匿名函数。例如: ``` (define (square x) (* x x)) (define (add x y) (+ x y)) (define (apply-twice f x) (f (f x))) ``` 5. 控制结构:Lisp 支持 if、cond、case 和 do 等控制结构,可以用来实现条件判断和循环。例如: ``` (if (> x 0) (print "x is positive") (print "x is non-positive")) (do ((i 0 (+ i 1))) ((>= i 10)) (print i)) ``` 6. 错误处理:Lisp 支持使用 catch 和 throw 关键字来进行错误处理。 7. 读取和输出:Lisp ### 回答2: Lisp语言是一种基于括号和表达式的编程语言,其语法规则主要包括以下几点: 1. 括号规则:Lisp语言,括号是非常重要的符号。括号用于表示表达式的开始和结束,常用的括号包括圆括号(())、方括号([])和花括号({})。每个表达式都必须用一对括号括起来。 2. 原子(Atom)规则:Lisp语言,原子是指表示数据或变量名称的元素。原子可以是数值(如整数或浮点数)、字符串、变量名或其他特殊符号(如加减乘除等)。原子用来表示构成表达式的基本单元。 3. 表达式规则:一个Lisp表达式由括号组成,其第一个元素是函数或操作符,后面的元素是该函数或操作符的参数。函数和操作符本身也可以是一个表达式。Lisp采用前缀表示法,即先写操作符,再写参数。 4. 注释规则:Lisp语言支持注释,可以使用分号(;)表示注释的开始。分号后面的内容将被忽略,不会被解释成代码。 5. 函数调用规则:Lisp语言,函数调用可以通过将函数名作为操作符,后跟其参数列表来完成。函数名和参数列表都用括号括起来。函数调用的结果可以作为另一个表达式的参数。 6. 定义规则:Lisp语言,可以使用特殊形式的表达式来定义变量、函数或宏。定义变量使用的是let或setq语句,定义函数使用的是defun语句。宏是一种特殊的函数,它可以接受和返回表达式。 这些是Lisp语言的基本语法规则,掌握了这些规则,就能够理解和编写简单的Lisp程序。当然,Lisp语言还有更多高级的语法规则和特性,如条件表达式、循环结构、匿名函数等,需进一步学习和掌握。 ### 回答3: Lisp语言是一种函数式编程语言,其语法规则相对简洁。下面详细介绍Lisp语言的语法规则: 1. 基本语法: - Lisp程序由表达式(expression)构成,每个表达式由左括号和右括号包围,形式为`(operator operand1 operand2 ...)`。其,operator表示操作符,operand表示操作数。 - Lisp的操作符可以是函数名、变量名或宏名。 - 操作数可以是表达式、常量或变量。 2. 变量定义: - 变量在Lisp以`(defvar variable value)`或`(setq variable value)`语法进行定义。其,variable为变量名,value为初始值。 - 可以使用`(setq variable new-value)`来更新变量的值。 3. 函数定义: - 函数定义语法为`(defun function-name (parameter-list) body)`。其,function-name为函数名,parameter-list为参数列表,body为函数主体。 - 函数主体包含了一系列表达式,可以通过`(return value)`来返回函数结果。 4. 条件判断: - 条件判断语法为`(if condition then-clause else-clause)`或`(cond (condition1 clause1) (condition2 clause2) ...)。 - if语句根据condition的真假来执行不同的then-clause和else-clause。 - cond语句按顺序逐个判断条件,执行对应的clause。 5. 循环结构: - Lisp提供了多种循环结构,如`(while condition body)`和`(loop body)`。 - while循环在每次迭代前判断condition的真假,只有在条件为真时执行循环体。 - loop循环是一个无限循环,通过`(return value)`可提前结束循环。 6. 定义数据结构: - Lisp提供了用于定义数据结构的语法元素`'(data1 data2 ...)`,数据结构可以是列表、向量、字符等。 - 列表使用`(list element1 element2 ...)`进行定义,可以通过`(car list)`和`(cdr list)`等访问元素。 - 向量使用`#(element1 element2 ...)`进行定义,通过`(aref vector index)`来访问元素。 总体来说,Lisp语言的语法规则相对简单,但由于其函数式编程的特性,可以进行丰富的函数和宏的定义,使得编程更加灵活和高效。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值