方案:康德“不平等”

时间:2013-03-28 15:43:09

标签: lisp scheme conditional

我想在计划中这样做:

if ((car l) != (car (cdr (order l))) do something

特别是我写了这个:

((eq? (car l) (car (cdr (order l))) ) 
 (cons (count (car (order l)) (order l)) 
       (count_inorder_occurrences (cdr (order l))))) 

但它将(car l)(car (cdr (order l))进行比较以确保相等性。 我只想在eq?为假时做某事。我怎么能在我的例子中这样做?

由于

3 个答案:

答案 0 :(得分:8)

您可以使用not

(cond
 ((not (eq? (car l) (cadr (order l))))
  (cons (count (car (order l)) (order l))
        (count-inorder-occurrences (cdr (order l))))
 ...)

答案 1 :(得分:1)

您可以使用not来否定谓词的值。

e.g。在if声明中:(if (not (eq? A B)) <EVAL-IF-NOT-EQ> <EVAL-IF-EQ>)

或在cond中你可以这样做:

(cond ((not (eq? A B))
       <EVAL-IF-NOT-EQ>)
      .
      .
      .
      (else <DEFAULT-VALUE>))

答案 2 :(得分:1)

如果您没有其他案例列表,那么您真的不需要condifwhen可能就是你要找的东西。它基本上只是if的真实情况。

(when (not (eq? (car l) (cadr (order l))))
   (cons 
      (count (car (order l)) (order l)) 
      (count-inorder-occurrences (cdr (order l)))
   )
)