Andmap \ ormap - схема Chez - PullRequest
       26

Andmap \ ormap - схема Chez

2 голосов
/ 22 ноября 2011

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

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

Ответы [ 2 ]

3 голосов
/ 22 ноября 2011

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

(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) ...)
1 голос
/ 22 ноября 2011
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
...