计算机程序的构造和解释笔记 - 条件表达式

条件表达式

检查一个数是正的, 负的或者零

在lisp里有着一种针对这类分情况分析的特殊形式, 称为cond. 其使用形式如下 :

(define (abs x)
	(cond ((> x 0) x)
		  ((= x 0) 0)
		  ((< x 0) (-x))))

条件表达式的一般性形式为

(cond (<p1> <e1>)
		  (<p2> <e1>)
		   ...
		  (<pn> <en>))

这里首先包含了一个符号cond,在它之后跟着一些称为子句的表达式对偶,他的值将被解释为真或假.

另一种写绝对值函数的方式是

(define (abs x)
  (cond ((< x 0) (-x))
		      (else x)))

这里表示, 如果x小于0就会返回-x, 否则就返回x.

if表达式

if表达式的一般形式是 :
(if <predicate> <consequent> <alternative>),

使用if表达式写绝对值函数的方式 :

(define (abs x)
	(if (< x 0)
		(- x)
		x))

逻辑复合运算符

  • (and <e1> ... <en>) : 解释器将从左到右一个个的求值.如果某个<e> 求值得到假, 这一and表达式的值就是假, 如果前面所有的 <e> 都求出真值, 这一and表达式的值就是最后那个 <e> 的值
  • (or <e1> ... <en>) : 解释器将从左到右一个个的求值 <e>, 如果某个<e> 求值得到真, or表达式就以这个表达式的值作为值, 后面的那个<e> 也不再求值了. 如果所有的<e> 都求出假值, 这一or表达式的值就是假
  • (not <e>) : 如果<e> 求出的值是假. not表达式的值就是真.

例子 :

  • 5 < x < 10 可以写为 : (and (> x 5) (< x 10))
  • 检测某个数是否大于或者等于另一个数 :
(define (>= x y))
	(or (> x y) (= x y))

联系1.1

(define b (+ a 1))
(+ a b (* a b))
(= a b)
(if (and (> b a) (< b (* a b)))
    b
    a)
(cond ((= a 4) 6)
      ((= b 4) (+ 6 7 a))
      (else 25)
      )
(+ 2 (if (> b a) b a))
(* (cond ((> a b) a)
         ((< a b) b)
         (else -1))
    (+ a 1))

返回

(define b (+ a 1))
(+ a b (* a b))
(= a b)
(if (and (> b a) (< b (* a b)))
    b
    a)
(cond ((= a 4) 6)
      ((= b 4) (+ 6 7 a))
      (else 25)
      )
(+ 2 (if (> b a) b a))
(* (cond ((> a b) a)
         ((< a b) b)
         (else -1))
    (+ a 1))

联系1.2

将数学算式 5+4+(2−(3−(6+45)))3(6−2)(2−7)
从中序表达式转换成前序表达式 :

((+  (+  5 4 ) +  (-  2+  (-  3+  (+  6 (/  4 5)))))
(* 3 (- 6 2) (- 2 7)))

联习 1.3

定义一个过程, 它以三个数为参数, 返回其中较大的两个数的平方和

(defind squeares x
	(* x x))
(defind (sum-for-squares x y)
	)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值