Andmap\ormap - схема Chez

Я попытался найти информацию об операциях andmap & ormap в схеме chez.

Тем не менее, я не понимаю использование этих операций, и в чем разница между ним и картой.

2 ответа

Решение

В псевдо-схеме,

(andmap f xs)  ==  (fold and #t (map f xs))
(ormap  f xs)  ==  (fold or  #f (map f xs))

Кроме этого:

  1. Вы не можете использовать and а также or в этом случае.
  2. andmap а также ormap может замкнуть обработку списка.

То есть, за исключением немного отличного поведения короткого замыкания,

(andmap f (list x1 x2 x3 ...))  ==  (and (f x1) (f x2) (f x3) ...)
(ormap  f (list x1 x2 x3 ...))  ==  (or  (f x1) (f x2) (f x3) ...)
Petite Chez Scheme Version 8.3
Copyright (c) 1985-2011 Cadence Research Systems

> (define (andmap f xs)
    (cond ((null? xs) #t)
          ((f (car xs))
            (andmap f (cdr xs)))
          (else #f)))
> (define (ormap f xs)
    (cond ((null? xs) #f)
          ((f (car xs)) #t)
          (else (ormap f (cdr xs)))))
> (andmap even? '(2 4 6 8 10))
#t
> (andmap even? '(2 4 5 6 8))
#f
> (ormap odd? '(2 4 6 8 10))
#f
> (ormap odd? '(2 4 5 6 8))
#t

Предоставлено Practical-scheme.net:

(ormap procedure list1 list2 ...)

Применяется procedure к соответствующим элементам списков последовательно, пока либо списки не закончатся, либо процедура не вернет истинное значение.

(andmap procedure list1 list2 ...)

Применяется procedure к соответствующим элементам списков последовательно, пока либо списки не закончатся, либо процедура не вернет ложное значение.

http://practical-scheme.net/wiliki/schemexref.cgi/ormap

Подумал, что это стоит поместить здесь, поскольку этот вопрос Stackru - первый результат в Google.

Другие вопросы по тегам