【问题标题】:Using match in chez scheme在 chez 方案中使用匹配
【发布时间】:2012-08-30 14:26:23
【问题描述】:

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

(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))])))

如何在两个程序中使用 match 来做到这一点? (或者你甚至需要两个程序?)

【问题讨论】:

    标签: scheme match chez-scheme


    【解决方案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 但我仍在学习 ;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 2020-07-04
      • 2013-11-06
      • 2023-03-10
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      相关资源
      最近更新 更多