最美丽的编程语言Scheme——条件表达式和谓词

对于熟悉C/C++或Java等类C的命令式编程语言的朋友来说,条件表达式应该不陌生吧。这些语言中一般有三种方式来表达条件分支:

1、if-else:if(condition == true)do_op1(); else do_op2();

2、switch-case:switch(expression) {case CONST_VALUE1: do_op1(); break; case CONST_VALUE2: do_op2(); break;}

3、三目表达式:(condition)? expression1 : expression2;

 

而Scheme也有自己的条件表达式。下面我们先介绍第一种:cond表达式。

cond表达式的一般形式为:

(cond (<p1> <e1>)

         (<p2> <e2>)

         ...

         (<pn> <en>))

 

上面的pi表示第i个谓词(predicate),而ei则表示第i个表达式(expression)。所谓谓词,简单地说就是布尔表达式,表示条件的真假。在数理逻辑中,它表示命题之间的关系。

在Scheme中,基本的条件操作符有:=、>、<、>=和<=,这个与C语言中的相同,但是这里的等于是单个等号,而不是两个。

我们下面用cond表达式举几个简单的例子:

 

我们看到上述第一条语句表示:若1 > 0,那么计算表达式10;

第二条语句表示:若0 > 1,则计算表达式10。由于0 > 1为假,因此计算结果得到“未指定返回值”。

 

当然,我们可以修正上述第二条语句:

 

我们上面用了一个else表达式来说明cond情况都不成立的时候所指定的计算表达式。这里我们可以看到else其实也是一个谓词表达式,并且它作为cond表达式的一个操作数。

 

以上都是单个谓词的情况,我们下面来写一个多个谓词的情况:

 

从上述代码中我们可以看到一些新的东西。首先(- x)表示对x取相反数,即等价与(- 0 x)。注意,这里的负号与x之间也必须要有空格。

然后,这里我们定义了一个balance函数。它带有一个参数。当x > 10时,我们用x - 10;若x > 0时,我们用x + 1;若x < -10时,我们用 1- x;否则,则是0 - x。

 

Scheme除了cond表达式外,还有if语句作为条件表达式。if语句的形式如下:

(if <predicate> <consequent> <alternative>)

<predicate>是谓词表达式;当谓词表达式的结果为真时,计算<consequent>表达式;否则,计算<alternative>表达式。

我们可以用if来定义一个取绝对值:

 

 

除了上述简单的谓词之外,我们还可以通过and、or以及not组成复合谓词。and表示“并且”;or表示“或”;not表示“否定”。

这些在类C语言中分别对应&&、||和!。

我们下面举个例子:

 

上述的func(x)所要表达的是当(x > 10) && (x < 20),或者(x < -10) && (x > -20),并且(x != 15) && (x != -15),那么结果为10000,否则,结果为-10000。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值