Sức mạnh diễn đạt của các lớp thủ tục mà chúng ta định nghĩa có những hạn chế đáng kể, bởi vì chúng ta không có cách nào kiểm tra và thực hiện các tính toán khác nhau tùy thuộc vào kết quả của bài kiểm tra. Ví dụ: chúng ta không thể xác định quy trình tính giá trị tuyệt đối của một số bằng cách kiểm tra xem số đó là dương, âm hay bằng 0 và thực hiện các hành động khác nhau trong các trường hợp khác nhau theo quy tắc:
Hướng dẫn như trên được gọi là một case analysis, cũng có một form cụ thể trong Lisp như là một case analysis. Được gọi là cond ( tương ứng với “conditional”) và được sử dụng như sau:
Biểu thức chung của một conditional (cond) là:
Bao hàm bởi biểu tượng cond theo sau là các cặp biểu thức (⟨p⟩ ⟨e⟩) được gọi là mệnh đề.
Biểu thức đầu tiên trong mỗi pair là một dự đoán giá trị của nó, một biểu thức được trình thông dịch dự đoán giá trị của nó là true or false.
Các biểu thức conditional được đánh giá như sau. Biểu thức <p1> được đánh giá đầu tiên, nếu giá trị là false thì <p2> được đánh giá, nếu giá trị là false thì <p3> được đánh giá. Qúa trình tiếp tục cho đến khi tìm ra giá trị của biểu thức nào đó là true, thì trình biên dịch sẽ trả về giá trị tương ứng của mệnh đề là <e>. Nếu không tìm được giá trị true nào thì giá trị của cond là undefined.
Predicate(dự đoán giá trị) được sử dụng cho các thủ tục có giá trị trả về là true or false, cũng như các biểu thức đánh giá là true hoặc false. Thủ tục tính giá trị tuyệt đối của một số abs sử dụng các dự đoán nguyên thủy là > , < , =. Các dự đoán này đưa vào 2 số như là các đối số để kiểm tra xem liệu rằng số đầu tiên lơn hơn, nhỏ hơn hay bằng số thứ hai , để trả về giá trị true hoặc false tương ứng.
Để thêm vào các dự đoán nguyên thủy như là <,>,=, có một vài toán tử logic được đưa ra cho mục đích trên, tạo điều kiện cho chúng ta khởi tạo các dự đoán của các biểu thức kết hợp. Ba dự đoán được sử dụng rộng rãi nhất là :
- (and ⟨e1⟩ . . . ⟨en⟩) : Nếu bất kỳ biểu thức <e> là false thì giá trị của biểu thức kết hợp là false. Và nếu tất cả <e> là true thì giá trị của biểu thức là true.
- (or ⟨e1⟩ . . . ⟨en⟩) Ngược lại với and. Nếu bất kỳ <e> là true thì giá trị của biểu thức là true. Nếu tất cả <e> là false thì giá trị của biểu thức là false.
- (not ⟨e⟩) Việc đánh giá xem xét rằng nếu <e> là true thì giá trị của biểu thức là false và ngược lại.
Ví dụ: (and (> x 5) (< x 10)) đánh giá một số có nằm trong khoảng từ 5 đến 10 hay không ( 5 < x <10)
(define (>= x y) (or (> x y) (= x y))) định nghĩa về một dự đoán để kiểm tra xem một số có lơn hơn hoặc bằng một số khác hay không.
Bài viết tiếp theo: Example: Square Roots by Newton’s Method