program added by anandamide on Tue Mar 29 18:42:08 2016

(use srfi-1)

(define-syntax foo
  (syntax-rules ()
    ([foo f lst]
     (eval `(f ,@lst)))))

;works
(define (conditional_ . conds)
  (lambda (x)
    (let ([clause (map (lambda (it)
			 `(,it ,x))
		       conds)])
      (foo and clause))))

;;;does not work using fold
(define (conditional . conds)
  (lambda (x)
    (let ([clause (map (lambda (it)
			 `(,it ,x))
		       conds)])
      (fold (lambda (a b)(and a b)) #t clause))))

(define p (conditional_ (lambda (x) (even? x))
			(lambda (x) (< x 10))))

(define q (conditional (lambda (x) (even? x))
		       (lambda (x) (< x 10))))

(display (p 1))
(newline)
(display (p 2))
(newline)
(display (p 10))
(newline)

(display (q 1))
(newline)
(dipslay (q 2))
(newline)
(display (q 10))
(newline)