Scheme
Su objetivo no es acumular un gran número de funcionalidades, sino evitar las debilidades y restricciones que hacen necesaria su adición.Las listas son la estructura de datos básica del lenguaje, que también ofrece arrays entre sus tipos predefinidos.Scheme, como todos los dialectos de Lisp, tiene una sintaxis muy reducida comparado con muchos otros lenguajes.No necesita reglas de precedencia en su gramática, ya que usa notación prefija para todas las llamadas a función.Los Scheme Requests for Implementation (SRFI) tratan de poner remedio a este problema.Como hemos dicho, el espacio de nombres es único (Scheme es un LISP-1) y, por tanto, también incluye a las macros.Las variables asignadas en el primer nivel usando define están en ámbito global (es decir, son visibles en el resto de programa).Las primitivas están pre-definidas en el lenguaje, e incluyen +, -, *, /, set!, car, cdr, y otros procedimientos básicos.Por ejemplo, el siguiente código: convierte la primitiva + en un procedimiento definido por el usuario que resta sus dos argumentos en lugar de sumarlos.Scheme tiene tres tipos diferentes de igualdad: También existen en Scheme los operadores de equivalencia dependientes del tipo: La primera expresión para la que la prueba resulte ser cierto (cualquier cosa salvo #f cuenta como cierto) será evaluada.Una variante de la cláusula cond es: En este caso, expr debe resultar en una función que toma un solo argumento.La expresión let con nombre y la sentencia do son azúcar sintáctica que simplifica las definiciones con recursión final.Adviértase que en ambos casos se prefiere la versión con recursión final debido a su menor uso de espacio.Scheme define tres puertos por defecto, accesibles con las funciones current-input-port, current-output-port y current-error-port.