vectorial operaciones numeros numero julioprofe forma explicacion con complejos complejo vector scheme racket definition overwrite

operaciones - Esquema: cambiar la definición de números complejos para aceptar vectores



operaciones con numeros complejos (3)

¿Sabe que el lector Racket ya admite números literales complejos?

Ejemplos de la referencia :

1+2i lee igual a (make-complex 1 2)

1/2+3/4i lee igual a (make-complex (/ 1 2) (/ 3 4))

1.0+3.0e7i lee igual a (exact->inexact (make-complex 1 30000000))

Básicamente, lo que trato de hacer es cambiar la definición de números complejos para poder representar vectores en Scheme. Quiero poder escribir algo como "i + j + k" sin las comillas y no hacer que el programa se vuelva completamente loco. Sé que los números complejos pueden representarse con algo así como "1 + 2i", así que esperaba que una sobreescritura simple pudiera lograr esto.

Pensé sobrescribir el complejo? la definición podría funcionar, pero parece no tener ningún efecto. No estoy seguro de dónde está el código que necesito afectar. Cualquier ayuda sería increíble. Gracias.


En resumen: no puede con un "sobrescribir simple" lograr lo que quiere. La sintaxis de los números incluye un + usado para leer / escribir números complejos, pero el lector convierte 2 + 3i en un número directamente sin opción de sobrescribir.

Si desea utilizar la notación infija en su programa, deberá reemplazar el lector. Esto es posible en Racket, pero es más complicado que una simple sobrescritura.

¿Tal vez puedas usar una biblioteca existente para notación infija en Racket?

Es posible que desee probar:

https://github.com/soegaard/this-and-that/blob/master/readtable/test2.rkt

que analiza cualquier cosa en {} como expresiones infija.


La modificación del lector de Esquemas no está prevista en los estándares del Plan y, por lo tanto, requerirá que cambie el "lector" para la implementación del Esquema que eligió, una tarea no trivial.

Sería mejor que incorporaras tu propio idioma en el Esquema adecuado utilizando las instalaciones de macro y abstracción de Scheme.

Supongamos que tiene una base de coordenadas para i, jyk y quiere expresar vectores como, por ejemplo, 2i + 7j-k. Puedes comenzar con:

(define (make-coord i j k) (vector i j k)) (define (coord-i b) (vector-ref b 0)) …

Entonces, si quieres hacer las cosas un poco más fáciles de expresar:

(define-syntax coord (syntax-rules () ((coord i j k) (make-coord i j k))))

que usarías como:

(define a-coord (coord 2 7 -1))

Editar: Aquí hay un ejemplo. Reemplacé a make-coord con la list :

> (define-syntax coord (syntax-rules () ((coord i j k) (list i j k)))) > (coord 1 1 1) (1 1 1)

Tenga en cuenta que una de las ventajas de usar sintaxis / funciones, en lugar del lector, es que puede usar expresiones:

> (coord (/ 124 4) 0 0) (31 0 0)