Custom eqv? / Равно? функция в схеме - PullRequest
0 голосов
/ 07 декабря 2010

Как мне написать собственный эквалайзер?или равно?в схеме?Буду ли я просто использовать cond и искать символ ?, число ?, и т. Д. И возвращать соответствующий #t или #f?

1 Ответ

5 голосов
/ 07 декабря 2010

Согласно R5RS минимальные спецификации для реализации eqv? (при передаче двух аргументов obj1 и obj2) для оценки #t:

  • obj1 и obj2 оба #t или оба #f.(то, как два логических литерала оценивают одно и то же значение, зависит от реализации).
  • obj1 и obj2 оба являются символами и

(string=? (symbol->string obj1) (symbol->string obj2)) =) => #t

  • obj1 и obj2 оба числа, численно равны (=) и либо точны, либо неточны.
  • obj1 и obj2 оба символа иодин и тот же символ в соответствии с процедурой char=?.
  • и obj1 и obj2 - пустой список.
  • obj1 и obj2 - пары, векторы или строкикоторые обозначают те же места в магазине (см. раздел 3.4 R5RS).
  • obj1 и obj2 являются процедурами, теги местоположения которых равны (выражение A lambda равно концептуально помечен местом хранения. Что это означает, зависит от реализации Схемы. Также см. раздел 4.1.4 R5RS).

equal? может быть реализован в терминах eqv?, поскольку он рекурсивно сравниваетсодержимое пар, векторов и строк, применяя eqv? к другому объектутакие действия, как цифры и символы.

...