Lisp语言中的if语句
目录
导言:
到底是if语句还是if函数?
if语句的语法:
使用if语句:
关系函数:
逻辑函数:
and函数:
or函数:
not函数:
导言:
在Lisp语言中拥有分支语句是一件十分正常的事情,毕竟几乎所有的编程语言都会有分支语句。所谓分支语句,就是当一个条件为真的时候,执行这个语句,当一个条件为假的时候,执行那个语句。怎么样?初学编程的读者读起来是不是一脸懵!我们可以举个例子,妈妈嘱咐小明去买一瓶可乐,可乐有两个品牌,一个可口,一个百事。妈妈说:“如果有可口可乐就买可口可乐,如果没有的话就买百事可乐。”可能上面的这个例子可以让读者更好理解“当一个条件为真的时候,执行这个语句,当一个条件为假的时候,执行那个语句”的概念,这个概念叫做分支。既然大家理解了分支的概念,我们就可以开始讲解Lisp语言中的if语句了。
到底是if语句还是if函数?
有LIsp经验的人可能说if在Lisp中不是一个语句,它是一个函数。虽然在其他语言当中if就是一个语句,但许多Lisp的初学者都叫if语句而不是叫if函数,那为什么我会在上文中叫if语句而不是叫if函数呢?原因是现在大多数编程语言中的if并不是一个函数,它是一个语句,我们之所以不叫if函数是因为让大家不必更改以前的叫法。并且许多Lisp用户都叫if语句而不是叫if函数,渐渐地人们似乎也认同了这样的叫法,可能这是因为其他编程语言学习的多了自然形成的叫法。但其实确信点来说if的确是LIsp语言中的一个函数而并非一个语句,所以叫if函数或if语句都是正确的,本文将if函数叫成if语句。(if是个函数并非似乎语句,所以if不是Lisp语言中的一个关键字。也就是说,变量的名称可以是“if”)。
if语句的语法:
说了这么多,我们也时候讲解if语句的应用了,但在说if语句应用前,我们先来看看if语句的语法:
(if 条件 条件为真执行的语句 条件为假执行的语句)
(注意:if语句的条件为真或为假时,他们分别执行的语句只有一条)
(如果条件正确返回真(T),不正确返回假(NIL))
使用if语句:
在讲解Lisp语言我们也说过了,要想使用一个函数,我们必须创建一个列表,所以我们先在Lisp的编译器上列出一个空列表,如下图所示:
()
之后在列表内写入”if“,表示我们要在Lisp中使用一个if语句(函数)。
(if)
之后我们要在if语句的参数内写入一个条件,这个条件会使用到=这个特殊的函数,它用于两个数之间的对比,与其他编程语言中的操作符==是同一个的意思。那为什么”=“是一个函数呢?在大多数编程语言中的==是一个运算符,所以这就给了Lisp初学者的一个刻板印象,认为Lisp语言中的=也是一个运算符。可能市面上其他的编程语言拥有许多相似之处,但作为Lisp语言的用户我们必须将这种思想扼杀掉!因为Lisp与其他高级编程语言有着很大的区别。
说了这么多,我们接着来看看if语句的条件是如何编写的,上文我们说到会使用到=这个特殊的函数,譬如我想判断1是否等于1时,我们可以这样写“(= 1 1)”,如下图所示:
(if (= 1 1))
编写玩if语句的条件后,我们需要在if语句的第二个参数内填入条件为真时执行的语句,最后在第三个参数内填入条件为假时执行的语句,像下面这样:
(if (= 1 1) (print "1 = 1") (print "1 != 1"))
大家是不是认为上则代码有点晦涩难懂,甚至觉得代码过于丑陋,可读性较差,但我们作为Lisp的用户从来不会这样写,我们会使用下面的这样排版形式:
(if 条件条件为真执行的语句条件为假执行的语句)
上面的这则排版形式会使程序的可读性更高,并且更像语句了。所以我们上一则代码可以像这样子写:
(if (= 1 1)(print "1 = 1")(print "1 != 1"))
我们现在一起来看看输出结果:
输出结果:"1 = 1"
"1 = 1"
有的读者会问为什么输出结果输出了两遍,对于这个问题读者们可以去看看作者的“Lisp语言中的print函数”这一篇文章,在这里作者不在为这个问题进行阐述。
关系函数:
在这些条件中我们不仅仅可以使用=这个特殊函数来满足if语句的条件,还可以使用<,>函数等等来满足if语句的条件,我们看看下面的满足if语句的条件的函数,这些函数在其他语言中叫做关系运算符,虽然它们具有一样的表达效果,但请注意区分:
= 判断两个参数是否一致
< 判断第一个参数是否小于第二个参数
> 判断第一个参数是否大于第二个参数
<= 判断第一个参数是否小于等于第二个参数
>= 判断第一个参数是否大于等于第二个参数
读者们可以一个一个在Lisp的编译器上试一试。
逻辑函数:
除了这些在if语句中常用到的特殊函数外,在if语句中的这几个函数读者也一样用的上,我们这些函数会在下文重逐一介绍:
and 和 (逻辑与)
or 或者 (逻辑或)
not 非 (逻辑非)
(注意:这些函数在其他语言中叫逻辑运算符)
and函数:
and函数只可以拥有两个参数,这两个参数是if语句的条件,and函数会判断多个条件是否都为真如果都为真,才可执行条件为真的语句。
(if (and (= 1 1) (= 2 2))(print "T")(print "NIL"))
这个代码块中的条件一共有两个,分别是1是否等于1,2是否等于2。很明显这两个条件都会返回T(为真),所以输出的是条件为真的语句。
输出结果为:"T"
"T"
所以说and函数的所有参数都要为真才会执行条件正确的代码,现在我们看看两个条件中有一个不为真的输出结果:
(if (and (= 1 1) (= 2 3))(print "T")(print "NIL"))
输出结果:"NIL"
"NIL”
这足以证明我们的结论是正确的,and的所有参数只要为真,if语句才会执行条件为真的语句。
and函数只有当所有的参数为真,if语句中的条件菜为真,条件正确的语句才会被执行,下面介绍的or函数与and函数有所不同。
or函数:
or函数的特点就是只要函数中有一个参数或两个参数为真,if语句的条件就为真。下面是or函数的实例:
(if (or (= 1 1) (= 1 2))(print "T")(print "NIL"))
当or函数的参数有一真有一假时,if语句的条件为为真,所以输出结果为:
输出结果:"T"
"T"
(if (or (= 1 1) (= 2 2))(print "T")(print "NIL"))
当or函数的参数都为真时,if语句的条件为为真,所以输出结果为:
输出结果:"T"
"T"
但当or函数的参数都为假时,if语句的条件为假,输出的结果自然是条件错误的语句,譬如下面这个例子:
(if (or (= 1 2) (= 2 1))(print "T")(print "NIL"))
判断1是否等于2,2是否等于1。
输出结果:"NIL"
"NIL"
not函数:
介绍了在if语句的条件里最为常见的函数,我们是时候该讲解最后一个逻辑函数not函数了,即便not函数不是特别常用,它可以将我们的条件从假变为真,从真变为假。
(if (= 1 1)(print "1 等于 1")(print "1 不等于 1"))
如果理解了上文所讲的全部内容,理解起上面这则代码是轻轻松松的事,但如果你还不理解上面这则代码的话说明你跳过的部分太多了,建议这类读者回看以前的部分。相信上面这则代码的答案读者们已经有了个底,看看下面的输出结果是否符合你的预期。
输出结果:"1 等于 1"
"1 等于 1"
但我们在if语句的条件中使用了not这个函数呢?我们会得到与上面不同的输出结果。
(if (not (= 1 1))(print "1 等于 1")(print "1 不等于 1"))
输出结果:"1 不等于 1"
"1 不等于 1"
其实这也符合我们的预期,毕竟在上文中讲过了not函数会把条件的值颠倒,把真值(T)改为假值(NIL),把假值(NIL)改为真值(T)。所以if语句的条件是1是否等于1,条件为T,使用了noe函数会把条件的值颠倒,所以if语句的值为假,所以执行的是条件为假的语句。
Lisp语言中的if语句相关推荐
- c语言中的if语句_If ... C中的其他语句解释
c语言中的if语句 Conditional code flow is the ability to change the way a piece of code behaves based on ce ...
- C语言switch中break的作用,C语言中switch...case语句中break的重要性
在C语言中switch...case语句是经常用到的,下面我介绍一下在使用该语句时候需要注意的一个细节问题.话不多说,直接举例子: 例子1: switch(fruit) { case 1:printf ...
- c语言中do有什么作用,C语言中do while语句的用法是什么?_后端开发
c语言有且唯一的函数是什么?_后端开发 在c语言中有且唯一的函数是:"main"函数."main"函数,又称主函数,是程序执行的起点:如果有其他函数,则会完成 ...
- c语言do while什么意思,C语言中do while语句的一般形式是什么
C语言中do while语句的一般形式是什么 发布时间:2020-07-07 13:54:36 来源:亿速云 阅读:136 作者:清晨 小编给大家分享一下C语言中do while语句的一般形式是什么, ...
- c语言while函数作用,详解C语言中的while语句
什么是C语言的while语句?它的作用是什么呢?估计很多初学者对此都是一知半解.下面课课家笔者就为大家详细解释C语言中的while语句的含义和作用. 首先笔者先给大家介绍C语言中的共有的三大常用的程序 ...
- c语言do while什么意思,C语言中do while语句的用法是什么?
C语言中"do while"语句用于语句的循环判断:语法为:"do {代码语句} while(表达式);".它与while循环的不同在于:"do wh ...
- c语言 case break,C语言中switch...case语句中break的重要性
在C语言中switch...case语句是经常用到的,下面我介绍一下在使用该语句时候需要注意的一个细节问题.话不多说,直接举例子: 例子1: switch(fruit) { case 1:printf ...
- c语言数组中逗号的作用,在C语言中,每个语句和数据定义是用( )结束。? 逗号|括号|分号|句号...
在C语言中,每个语句和数据定义是用( )结束.? 逗号|括号|分号|句号 更多相关问题 [多选题]有关商事登记的内容,下列表述哪些是不正确的: A. 商事登记不是取得商人资格的必备条件 B. 商事登记 ...
- C语言中的for语句
for语句 C语言中的for语句是一个十分常用的循环结构,比while更为简洁直观.常用的for语句的语法如下: for(expression1;expression2;expression3)sta ...
最新文章
- 加权残差连接ReZero
- 晶体封装越小esr越大_晶体谐振器等效电路,负载谐振电阻,负载电容,品质因数...
- Spring Session源码
- css常用样式汇总记录
- 北京内推 | ​阿里达摩院智能计算实验室认知智能组招收多模态算法实习生
- 防火墙(10)——禁止含有某些敏感字段发出去、限制连接数量(单ip地址)
- 【Gym - 101061F】Fairness(dp,思维)
- mysql中如何把两个查询结果列数不同并成一张表_MySQL
- mysql标识列从一开始_mysql中标识列是什么意思有什么用
- tarfile读文件python_Python中使用tarfile压缩、解压tar归档文件示例
- Hibernate常出现的报错
- java父类与子类的构造方法,java父类子类构造方法及方法的调用
- go项目实战 <微信公众号后台开发>(一、获取token)
- 个人朋友圈时代过去了,企业微信朋友圈开辟营销新思路
- ArcGIS操作Excel文件没有注册类解决办法
- geek_2013年How-To Geek的节日礼物指南:一定要装满东西
- 天梯赛省赛选拔赛复盘
- 雷电网络更新:迈向 Ithaca
- 将Delphi2007的所有dcu打包到一个运行时包中
- Oracle OIM 原理