Sharp Scheme 0.38

Soleil

Buenas, vengo a presentaros mi último proyecto. :-)

SS (SharpScheme) es un intérprete del lenguaje de programación Scheme, tal como fue
definido por el standard R4RS. Se trata de un port de Jscheme (hecho en Java) de Peter
Norvig a C# y corre sobre el Net Framework. (2.0, 3.5 o también Mono)

En un futuro la idea es ofrecer integración con C# y soportar todo el standard R5RS,
pero esta primera versión ya pasa todos los tests del r4rs y añade macros y otras cosas
de r5rs.

Más información sobre el lenguaje Scheme:
http://es.wikipedia.org/wiki/Scheme

Los estándares R4RS y R5RS:
http://people.csail.mit.edu/jaffer/r4rs_toc.html
http://www.schemers.org/Documents/Standards/R5RS/HTML/

La web del Jscheme original de Peter Norvig (director de investigación en google):
http://norvig.com/jscheme.html

La web de SharpScheme:
http://sharpscheme.berlios.de/

Espero os guste, un saludo. : -)

r2d2rigo

Espero que regales un par de teclas "(" y ")" con cada descarga :P

Soleil

Ná hombre, para eso están los editores que autocompletan
así que con regalar la "(" servirá. : -P

8 días después
LOc0

Yo de mayor quiero ser como #1 y .

Salu2 ;)

O

Parece ser muy importante pero no tengo ni repajotera idea de que se trata.

Alguien me puede decir en idioma de calle ( no soi inculto ) que se obtiene en la utilización de eso?

thx

Soleil

Hola.

No es nada importante, sólo un proyecto más para aprender sobre cómo se implementa un lenguaje de programación, su intérprete, etc... Aparte no había ningún intérprete de Scheme decente para .NET así que era un proyecto útil. (se puede compilar en una dll y usar como lenguaje de extensión en cualquier programa .NET)

Siempre me he interesado por lenguajes imperativos (como C) así que quise ver algo diferente; Scheme es un lenguaje funcional con algunas características extrañas a lenguajes como C, como macros, closures, continuaciones... (en la wikipedia y en páginas sobre Scheme explican mejor todas sus propiedades).

Ésto viene a ser un intérprete de ese lenguaje, escrito en C#. Es decir, tú escribes programas en Scheme y SharpScheme los ejecuta, del mismo modo que Python interpreta programas en Python o Gcc compila programas en C.

Un ejemplo de programa sencillo en Scheme, que calcula el factorial de un número dado. Me gusta poner el ejemplo porque da a entender lo distinto que puede ser un lenguaje funcional. : -)

Función factorial en C:
long int factorial (int n) {
   if (n<2) 
      return 1;
   else
      return n * factorial(n-1);
}

Función factorial en Scheme al estilo de la de C (recursiva):
(define (fact n)
    (if (< n 2)
        1
        (* n (fact (- n 1)))))
Función factorial en Scheme, pero en estilo funcional:
;; Defino una función que me de un rango de nºs...
(define (range low high)
  (cond
    (> low high) '())
    (else (cons low (range (+ low 1) high)))))

;; Defino factorial
(define (fact n) (apply * (range 1 n)))

Esta última solución es particularmente interesante, porque se ve cómo se piensa
en un lenguaje funcional. Se define factorial como la aplicación de la función '*' (multiplicación)
al rango de números que va desde 1 hasta N. (donde N es el factorial a calcular)

Si lo probamos en SharpScheme:

(define (range low high)
(if (> low high) '()
(cons low (range (+ 1 low) high))))
range

(define (fact n) (apply * (range 1 n)))
fact

(fact 10)
3628800

(fact 50)
3,04140932017134E+64

JuAn4k4

Eso es lisp , no ? Si tiene hasta el apply y el cons.

Edit : Despues de buscar, la sintaxis es la de lisp. ( dialecto de lisp ), lo que cambia es la lista de nombres, que ha de ser unica y alguna cosa mas.

Usuarios habituales

  • JuAn4k4
  • Soleil
  • Ortensio
  • LOc0
  • r2d2rigo