全民Scheme(2):来自星星的你


一门编程语言,如果不能对你思考编程的方式产生影响,就不值得去学习。——  Alan Perlis

(define rember*
  (lambda (a list)
    (cond
      ((null? list) '())
      ((atom? (car list)) (cond 
                      ((eq? a (car list)) (rember* a (cdr list)))
                      (else (cons (car list) (rember* a (cdr list))))))
      (else (cons (rember* a (car list)) (rember* a (cdr list)))))))


(rember* 'cup '((coffee) cup ((tea) cup) (and (hick)) cup))

(define insertR*
  (lambda (new old l)
    (cond
      ((null? l) '())
      ((atom? (car l)) (cond
                         ((eq? (car l) old) (cons old (cons new (cdr l))))
                         (else (cons (car l) (insertR* new old (cdr l))))))
      (else (cons (insertR* new old (car l)) (insertR* new old (cdr l)))))))

(insertR* 'roast 'chuck '((how much (wood))
                          could
                          ((a (wood) chuck))
                          (((chuck)))
                          (if (a) ((wood chuck)))
                          could chuck wood))

(define occur*
  (lambda (a l)
    (cond
      ((null? l) 0)
      ((atom? (car l)) (cond ((eq? a (car l)) (+ 1 (occur* a (cdr l))))
                             (else (occur* a (cdr l)))))
      (else (+ (occur* a (car l)) (occur* a (cdr l)))))))

(occur* 'banana '((banana) (split ((((banana ice)))
                                   (cream (banana))
                                   sherbet))
                           (banana)
                           (bread)
                           (banana brandy)))
(define subst*
  (lambda (new old l)
    (cond
      ((null? l) '())
      ((atom? (car l)) (cond
                         ((eq? old (car l)) (cons new (subst* new old (cdr l))))
                         (else (cons (car l) (subst* new old (cdr l))))))
      (else (cons (subst* new old (car l)) (subst* new old (cdr l)))))))
(subst* 'orange 'banana '((banana) (split ((((banana ice)))
                                   (cream (banana))
                                   sherbet))
                           (banana)
                           (bread)
                           (banana brandy)))

(define insertL*
  (lambda (new old l)
    (cond
      ((null? l) '())
      ((atom? (car l)) (cond
                        ((eq? old (car l)) (cons new (cons old (insertL* new old (cdr l)))))
                        (else (cons (car l) (insertL* new old (cdr l))))
                        ))
      (else (cons (insertL* new old (car l)) (insertL* new old (cdr l)))))))

(insertL* 'pecker 'chuck '((how much (wood))
                           could
                           ((a (wood) chuck))
                           (((chunck)))
                           (if (a) ((wood chuck)))
                           (could chuck wood)))

(define member*
  (lambda (a l)
    (cond
      ((null? l) #f)
      ((atom? (car l)) (cond
                         ((eq? (car l) a) #t)
                         (else (member* a (cdr l)))))
      (else (or (member* a (car l))
                (member* a (cdr l)))))))

(member* 'chips '((potato) (chips ((with) fish)(chips)))) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值