全民Scheme(1):数字游戏

刚刚看到两句话,感觉不错,分享给大家:

1.用户的问题,就是我们的问题

2.做一些用户想要的东西

(define add1
  (lambda (x)
    (+ 1 x)))

(define sub1
  (lambda (x)
    (- x 1)))

(add1 67)
(sub1 5)
(sub1 0)

(zero? 22)

(define addup
  (lambda (tup)
    (cond
      ((null? tup) 0)
      (else (+ (car tup) (addup (cdr tup)))))))

(addup '(3 4 5))

(define *
  (lambda (x y)
    (cond
      ((eq? 1 x) y)
      (else (+ y (* (sub1 x) y))))))

(* 3 9)

(define tup+
  (lambda (tup1 tup2)
    (cond
      ((null? tup1) '())
      (else (cons (+ (car tup1) (car tup2)) (tup+ (cdr tup1) (cdr tup2)))))))

(tup+ '(2 3 4 5) '(5 4 3 2))

(define >
  (lambda (x y)
    (cond
    ((zero? x) #f)
    ((zero? y) #t)
    (else (> (sub1 x) (sub1 y))))))

(> 4 3)
(> 3 3)
(> 3 4)

(define <
  (lambda (x y)
    (cond
      ((zero? y) #f)
       ((zero? x) #t)
       (else (< (sub1 x) (sub1 y))))))
(< 3 3)
(< 4 3)
(< 3 4)

(define =
  (lambda (x y)
    (cond
      ((> x y) #f)
      ((< x y) #f)
      (else #t))))
(= 3 4)
(= 3 3)
(= 4 3)

(define expt
  (lambda (x y)
    (cond
    ((zero? y) 1)
    (else (* x (expt x (sub1 y)))))))

(expt 5 3)

(define /
  (lambda (x y)
    (cond
      ((< x y) 0)
      (else (add1 (/ (- x y) y))))))
(/ 10 2)

(define length
  (lambda (lat)
    (cond
      ((null? lat) 0)
      (else (add1 (length (cdr lat)))))))
(length '(good hello))


(define pick
  (lambda (n lat)
    (cond
      ((eq? n 1) (car lat))
      (else (pick (sub1 n) (cdr lat))))))

(pick 3 '(hotdogs with hot mustard))

(define no-nums
  (lambda (list)
    (cond
      ((null? list) '())
      ((number? (car list)) (no-nums (cdr list)))
      (else (cons (car list) (no-nums (cdr list)))))))

(no-nums '(5 pears 6 prunes 9 dates))

(define all-nums
  (lambda (lat)
    (cond
      ((null? lat) '())
      ((number? (car lat)) (cons (car lat) (all-nums (cdr lat))))
      (else (all-nums (cdr lat))))))
(all-nums '(99 abc 33 mm 9 gg fuck))

(define eqlat?
  (lambda (a1 a2)
    (cond
      ((and (null? a1) (null? a2)) #t)
      ((and (number? (car a1)) (number? (car a2)))
       (cond
         ((= (car a1) (car a2)) (eqlat? (cdr a1) (cdr a2)))
         (else #f)))
      ((eq? (car a1) (car a2)) (eqlat? (cdr a1) (cdr a2)))
      (else #f))))

(eqlat? '(a b c 33) '(a b c 33))

(define occur
  (lambda (a lat)
    (cond
      ((null? lat) 0)
      ((number? a)
       (cond
         ((and (number? (car lat)) (= (car lat) a)) (add1 (occur a (cdr lat))))
         (else (occur a (cdr lat)))))
      ((number? (car lat)) (occur a (cdr lat)))
      ((eq? a (car lat)) (add1 (occur a (cdr lat))))
      (else (occur a (cdr lat))))))
(occur 'a '(a b c d e a 3 4 a))
(occur 3 '(b cd e 3 4 3 ed 3))

(define one?
  (lambda (n)
    (= n 1)))


(one? 3)


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值