在chez方案中使用匹配

时间:2012-09-05 19:48:07

标签: scheme match chez-scheme

我正在尝试学习如何在计划中使用匹配。我有点理解它如何与真正的短问题一起工作(即:定义长度只有两行)但不存在有多个输入和辅助程序的问题。例如,这是一种定义联合的流行方式:

(define ele? 
  (lambda (ele ls)
   (cond
    [(null? ls) #f]
    [(eq? ele (car ls)) #t]
    [else (ele? ele (cdr ls))])))

(define union
 (lambda (ls1 ls2)
  (cond
   [(null? ls2) ls1]
   [(ele? (car ls2) ls1) (union ls1 (cdr ls2))]
   [else (union (cons (car ls2) ls1) (cdr ls2))])))

你如何在两个程序中使用匹配? (或者你甚至需要两个程序?)

1 个答案:

答案 0 :(得分:1)

第一个可以这样实现:

(define ele?
  (lambda (a b)
    (let ((isa? (lambda (x) (eq? (car x) a))))
      (match b [(? null?) #f]
               [(? isa?) #t]
               [_ (ele? a (cdr b))]))))

然后第二个很容易

(define uni
  (lambda (ls1 ls2)
    (let ((carinls2? (lambda (x) (ele? (car x) ls1))))
      (match ls2 [(? null?) ls1]
                 [(? carinls2?) (uni ls1 (cdr ls2))]
                 [_ (uni (cons (car ls2) ls1) (cdr ls2))]))))

也许有一种更聪明的方法来避免这些争论让lambdas但我还在学习;)

相关问题