lisp - Pares coincidentes en el esquema

CorePress2024-01-24  7

Estoy jugando a escribir código en un esquema. Aquí tienes un ejemplo de cómo hacer un Fibonacci:

(define (fib n)
  ; if n == 0:
  (if (= n 0)
  ;   return 0
      0
  ; else if n==1
  (if (= n 1)
  ; return 1
     1
  ; else return fib(n-1) + fib(n-2)
     (+ (fib (- n 1)) (fib (- n 2)))))
)
(fib 4)
(fib 3)
(fib 2)
(fib 1)
(fib 0)
3
2
1
1
0

Mi pregunta es más sobre consejos generales. ¿Cómo diablos puedes hacer un seguimiento de todos los paréntesis? No es tanto una cuestión de legibilidad (eso no me importa), sino más bien una cuestión de hacer las cosas bien y no tener que hacer prueba y error en diez lugares diferentes para agregar pares adicionales y ver si las cosas funcionan. cuando todo esté dicho y hecho.

¿Existe una buena manera de manejar mejor los pares, como un buen IDE o entorno web o lo que sea, o la respuesta es simplemente "acostumbrarse"? ?

1

Consiga un buen IDE que comprenda la sintaxis Lisp. He oído que Eclipse es bueno para esto.

- Robert Harvey

27 de marzo de 2021 a las 1:17

stackoverflow.com/questions/2207255/lisp-parentheses podría ayudar

- ggorlen

27 de marzo de 2021 a las 1:18

3

Racket viene con su propio IDE que gestiona los paréntesis. Parece que la mayoría de los que programan regularmente con Common Lisp usan Emacs con Slime o Sly y con Scheme Geiser. También existe el modo raqueta con Emacs para Racket. paredit a menudo se combina con estos en Emacs. Hay complementos similares para Vim, pero yo uso Emacs para ceceo, por lo que estoy menos familiarizado con ellos.

-ad absurdum

27 de marzo de 2021 a las 5:49

El editor de texto Kate que viene incluido con muchas distribuciones de Linux tiene resaltado de sintaxis, entiende la sintaxis Scheme y colorea.rs coinciden con los paréntesis al estilo arcoíris para hacerlos más visibles; todo esto listo para usar.

-ad absurdum

27 de marzo de 2021 a las 7:19

@adabsurdum, ¿sabes si VS Code es popular para alguna sintaxis tipo lista?

-David542

27/03/2021 a las 18:38



------------------------------------

La respuesta habitual a esto que no es IDE Lisp es la sangría.

Dejas que te guíe en la lectura del código. Das por sentado que los padres están equilibrados para seguir la estructura de sangría del código que ves.

Mientras escribes, normalmente realizas un seguimiento mental de lo que sucede localmente y, cuando cierras un par, sabes en qué expresión termina.

Mantenga estas expresiones breves, comience cada nueva en la nueva línea debajo de la anterior del mismo nivel semántico, con sangría al mismo nivel de sangría (el color del arco iris para mí personalmente no es útil en lo más mínimo, más bien distrae y confuso).

Como ejemplo, su código formateado correctamente según estas pautas se convierte

(define (fib n)
  (if (= n 0)
      0
      (if (= n 1)
          1
          (+ (fib (- n 1)) 
             (fib (- n 2)))))

que podemos leer sin prestar la más mínima atención a los paréntesis.

Y la legibilidad es el objetivoescribiendo el código en primer lugar, ¿no es así?

2

Tampoco me gustan los paréntesis de arco iris, pero es útil que los pares coincidentes se indiquen parpadeando o cambiando de color cuando los recorre, por ejemplo, cuando busca el lugar correcto para insertar una expresión.

-ad absurdum

1 de abril de 2021 a las 12:38

1

@adabsurdum eso, sí. también la capacidad de saltar al paréntesis correspondiente.

- Will Ness

1 de abril de 2021 a las 12:41



------------------------------------

Utilice Emacs con Geiser o, alternativamente, DrRacket.

DrRacket le permitirá configurar el idioma en R5RS (o R7RS) si desea utilizar Scheme estándar en lugar de Racket, que es un pariente cercano.

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare