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))
Кроме этого:
- Вы не можете использовать
and
а такжеor
в этом случае. 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.