Исключающее ИЛИ в схеме

Каково эксклюзивное или функционирует в схеме? Я попробовал xor и ^, но оба дают мне несвязанную ошибку локальной переменной.

Поиск с помощью Google ничего не нашел.

6
задан Jeffrey Aylesworth 18 December 2009 в 21:56
поделиться

4 ответа

Я предлагаю вам использовать (not (equal? ​​Foo bar)) , если не равно работает. Обратите внимание, что для вашей ситуации могут быть более быстрые компараторы, такие как eq?

9
ответ дан 8 December 2019 в 02:46
поделиться

Если вы имеете в виду побитовое xor двух целых чисел, то каждая схема имеет собственное имя (если есть), поскольку оно не входит ни в один стандарт. Например, в PLT есть эти побитовые функции , включая bitwise-xor .

(Э-э, если вы говорите о логических значениях, то да, не & или это ...)

7
ответ дан 8 December 2019 в 02:46
поделиться

Насколько я могу судить из R6RS (последнее определение схемы), предопределенной операции «исключающее ИЛИ» нет. Однако xor эквивалентно не равно для логических значений, поэтому его действительно довольно легко определить самостоятельно, если для него нет встроенной функции.

Предполагая, что аргументы ограничены логическими значениями схемы #f и #t ,

(define (xor a b)
  (not (boolean=? a b)))

выполнит работу.

9
ответ дан 8 December 2019 в 02:46
поделиться

Ответ в другом стиле:

(define xor
  (lambda (a b)
    (cond
      (a (not b))
      (else b))))   
6
ответ дан 8 December 2019 в 02:46
поделиться