#lang scheme

(define suma2
  (lambda (n)
    (+ 2 n) ))

(printf "Aplicación de suma2 con n=~a. (suma2 ~a) ==> ~a ~n" 7 7 (suma2 7))

(define añade1
  (lambda (n . x)
    (add1 
     (apply + (cons n x))) ))

(printf "Aplicación de añade1. (añade1 ~a) ==> ~a ~n" 3 (añade1 3))

(printf "Aplicación de añade1. (añade1 ~a ~a ~a) ==> ~a ~n" 2 3 4 (añade1 2 3 4))

(define suma
  (lambda arg
    (apply + arg) ))

(printf "Aplicación de suma. (suma 2) ==> ~a ~n" (suma 2))

(printf "Aplicación de suma. (suma 2 3 4 5 6) ==> ~a ~n" (suma 2 3 4 5 6))

(define sumo
  (lambda arg
    (printf "Aplicación de sumo. (sumo ~a) ==> " arg)
    (apply + arg) ))

(sumo 1 2 3)

(printf "Aplicación de map. (map
 add1
 '(2 3 4 5)) ==> ")

(map
 add1
 '(2 3 4 5))

(printf "Aplicación de for-each. (for-each
 add1
 '(2 3 4 5)) ==> ")

(for-each
 add1
 '(2 3 4 5))

(printf "~n Aplicación de for-each con rastreo.")

(for-each
 (lambda (x) (printf "~n add1 a ~a => ~a" x (add1 x)))
 '(2 3 4 5))

;(newline)

(printf "~n Aplicación de filter. (filter
 even?
 '(1 2 3 4 5 6 7 8 9 10)) ==> ")

(filter
 even?
 '(1 2 3 4 5 6 7 8 9 10))