方案过滤功能代码含义

时间:2016-09-30 17:11:50

标签: scheme

我被要求解释以下代码:

(define (filter p l)
   (cond 
      ((null? l) ’())
      (#t (let ((result (filter p (cdr l))))
          (if (p (car l)) 
              (cons (car l) result) 
              result)))))

,解决方案为" filter返回el(p e)" {}的#t元素 但我不确定第3行是做什么的。是#t说我们总是接受这种情况吗?另外,' let'在这种情况下工作?

1 个答案:

答案 0 :(得分:3)

它的格式有点奇怪,但是cond在这里起着来自haskell或ML的匹配表达式的作用:

match l with
| [] -> []
| x :: xs -> 
    let result = filter p xs in
    (if p x then 
        x :: result
     else
        result
    )

Cond需要成对(执行 - 执行?),因此它应该更像这样读取

(cond 
   ((null? l)  ’())
   (#t         (let ((result (filter p (cdr l))))
                 (if (p (car l)) 
                   (cons (car l) result) ;; then
                   result) ;; else
               )))

所以#t - >这样做的其他东西是默认情况,因为它总是在列表不为空时执行,这会触发(null?l)。因此它必须是最后的。