目录

导言:

到底是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语句相关推荐

  1. c语言中的if语句_If ... C中的其他语句解释

    c语言中的if语句 Conditional code flow is the ability to change the way a piece of code behaves based on ce ...

  2. C语言switch中break的作用,C语言中switch...case语句中break的重要性

    在C语言中switch...case语句是经常用到的,下面我介绍一下在使用该语句时候需要注意的一个细节问题.话不多说,直接举例子: 例子1: switch(fruit) { case 1:printf ...

  3. c语言中do有什么作用,C语言中do while语句的用法是什么?_后端开发

    c语言有且唯一的函数是什么?_后端开发 在​c语言中有且唯一的函数是:"main"函数."main"函数,又称主函数,是程序执行的起点:如果有其他函数,则会完成 ...

  4. c语言do while什么意思,C语言中do while语句的一般形式是什么

    C语言中do while语句的一般形式是什么 发布时间:2020-07-07 13:54:36 来源:亿速云 阅读:136 作者:清晨 小编给大家分享一下C语言中do while语句的一般形式是什么, ...

  5. c语言while函数作用,详解C语言中的while语句

    什么是C语言的while语句?它的作用是什么呢?估计很多初学者对此都是一知半解.下面课课家笔者就为大家详细解释C语言中的while语句的含义和作用. 首先笔者先给大家介绍C语言中的共有的三大常用的程序 ...

  6. c语言do while什么意思,C语言中do while语句的用法是什么?

    C语言中"do while"语句用于语句的循环判断:语法为:"do {代码语句} while(表达式);".它与while循环的不同在于:"do wh ...

  7. c语言 case break,C语言中switch...case语句中break的重要性

    在C语言中switch...case语句是经常用到的,下面我介绍一下在使用该语句时候需要注意的一个细节问题.话不多说,直接举例子: 例子1: switch(fruit) { case 1:printf ...

  8. c语言数组中逗号的作用,在C语言中,每个语句和数据定义是用( )结束。? 逗号|括号|分号|句号...

    在C语言中,每个语句和数据定义是用( )结束.? 逗号|括号|分号|句号 更多相关问题 [多选题]有关商事登记的内容,下列表述哪些是不正确的: A. 商事登记不是取得商人资格的必备条件 B. 商事登记 ...

  9. C语言中的for语句

    for语句 C语言中的for语句是一个十分常用的循环结构,比while更为简洁直观.常用的for语句的语法如下: for(expression1;expression2;expression3)sta ...

最新文章

  1. 加权残差连接ReZero
  2. 晶体封装越小esr越大_晶体谐振器等效电路,负载谐振电阻,负载电容,品质因数...
  3. Spring Session源码
  4. css常用样式汇总记录
  5. 北京内推 | ​阿里达摩院智能计算实验室认知智能组招收多模态算法实习生
  6. 防火墙(10)——禁止含有某些敏感字段发出去、限制连接数量(单ip地址)
  7. 【Gym - 101061F】Fairness(dp,思维)
  8. mysql中如何把两个查询结果列数不同并成一张表_MySQL
  9. mysql标识列从一开始_mysql中标识列是什么意思有什么用
  10. tarfile读文件python_Python中使用tarfile压缩、解压tar归档文件示例
  11. Hibernate常出现的报错
  12. java父类与子类的构造方法,java父类子类构造方法及方法的调用
  13. go项目实战 <微信公众号后台开发>(一、获取token)
  14. 个人朋友圈时代过去了,企业微信朋友圈开辟营销新思路
  15. ArcGIS操作Excel文件没有注册类解决办法
  16. geek_2013年How-To Geek的节日礼物指南:一定要装满东西
  17. 天梯赛省赛选拔赛复盘
  18. 雷电网络更新:迈向 Ithaca
  19. 将Delphi2007的所有dcu打包到一个运行时包中
  20. Oracle OIM 原理

热门文章

  1. 金蝶k3服务器物理内存过高,物理内存过高的解决办法
  2. 电脑摄像头识别二维码OpenCV程序
  3. 3D目标检测学习笔记
  4. uni-app生成分享图片( 使用 Painter 生成分享海报)
  5. flutter onPressed onTap等手势检测及触摸事件处理
  6. java 定义整数数组_JAVA中数组的正确定义方法是什么?
  7. vue-生成二维码+下载二维码
  8. markdown/md文件只读权限修改
  9. android apk安装工具,安卓装机必备工具!一键批量安装应用apk
  10. STM32踩坑1-SWD下载失败