it-swarm.com.ru

Схема: конд "не равно"

Я хотел бы сделать это в схеме:

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? имеет значение false. Как я могу сделать это в моем примере?

Спасибо

5
Frank

Для этого вы можете использовать not.

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

Вам действительно не нужны cond или if, если у вас нет списка других дел. when может быть то, что вы ищете. Это в основном только истинный случай if.

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

Вы можете использовать not для отрицания значения предиката.

например в заявлении 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>))
1
robbyphillips