#lang racket

  Una funcion en Scheme se define con la palabra reservada :
; define

       forma
; (define
;  (NOMBRE-FUNCION arg1 arg2 .. argn)
     ( LOGICA )
; ) 

(define (plus-five n)
  (+ n 5))

        , la funcion plus - five queda guardada en memoria
  Para ejecutarla , en el interprete   :

; (plus-five 3)
  Lo que dara como resultado : 8

;Scheme como lenguaje declarativo
  No es necesario     imperativos
  Simplemente es decirle      .
  Explicitamos el QUE , pero no el COMO

  Ejemplo : Dada una lista de numeros , obtener una lista que contenga
           la raiz cuadrada de cada uno  

  En lenguajes imperativos como C ,    forma algoritmica
  planteando pasos tales  :
  ; Recibir lista de numeros
  ; Crear lista 
  ; Iterar la lista de numeros de entrada y a cada elemento aplicar raiz cuadrada
  ;    en la lista 

  En lenguajes como Scheme , esto se       
  No pensamos en como llegar a la meta , simplemente pensamos en la meta

(map sqrt (list 1 4 9 16 25 36 49))

      queremos  dos funciones
  1 . Obtener la raiz    elemento
  2 .        no .
  Guardar en una lista los valores booleanos correspondientes
; de cada valor

  Podemos hacer composicion de funciones , de forma declarativa
  Primero ejecuta sqrt en cada elemento y luego pregunta si es par o no
;; even? es una funcion interna de scheme que pregunta si el elemento es par o no

(map (compose even? sqrt) (list 1 4 9 16 25 36 49))

 define
 (define
  (NOMBRE-FUNCION arg1 arg2 .. argn)
 ) 
 (plus-five 3)
Scheme como lenguaje declarativo
 Recibir lista de numeros
 Crear lista 
 Iterar la lista de numeros de entrada y a cada elemento aplicar raiz cuadrada
    en la lista 
 de cada valor
 even? es una funcion interna de scheme que pregunta si el elemento es par o no
#lang racket

  Una funcion en Scheme se define con la palabra reservada :

       forma
     ( LOGICA )

(define (plus-five n)
  (+ n 5))

        , la funcion plus - five queda guardada en memoria
  Para ejecutarla , en el interprete   :

  Lo que dara como resultado : 8

  No es necesario     imperativos
  Simplemente es decirle      .
  Explicitamos el QUE , pero no el COMO

  Ejemplo : Dada una lista de numeros , obtener una lista que contenga
           la raiz cuadrada de cada uno  

  En lenguajes imperativos como C ,    forma algoritmica
  planteando pasos tales  :

  En lenguajes como Scheme , esto se       
  No pensamos en como llegar a la meta , simplemente pensamos en la meta

(map sqrt (list 1 4 9 16 25 36 49))

      queremos  dos funciones
  1 . Obtener la raiz    elemento
  2 .        no .
  Guardar en una lista los valores booleanos correspondientes

  Podemos hacer composicion de funciones , de forma declarativa
  Primero ejecuta sqrt en cada elemento y luego pregunta si es par o no

(map (compose even? sqrt) (list 1 4 9 16 25 36 49))
