Hace un procedimiento de este tipo existen en un Esquema estándar y si sí, ¿cómo se llama?

StackOverflow https://stackoverflow.com/questions/98394

  •  01-07-2019
  •  | 
  •  

Pregunta

Busqué el nombre de un procedimiento, el cual se aplica una estructura de árbol de los procedimientos de la estructura de árbol de datos, produciendo una estructura de árbol de los resultados - los tres árboles de tener la misma estructura.

Un procedimiento de este tipo podría tener la firma:

(map-tree data functree)

Su valor de retorno sería el resultado de elementwise aplicación de functree elementos en los correspondientes elementos de datos.

Ejemplos (suponiendo que el procedimiento se denomina mapa de árbol):

Ejemplo 1:

(define *2 (lambda (x) (* 2 x)))
; and similar definitions for *3 and *5

(map-tree '(100 (10 1)) '(*2 (*3 *5)))

daría el resultado

(200 (30 5))

Ejemplo 2:

(map-tree '(((aa . ab) (bb . bc)) (cc . (cd . ce)))
        '((car cdr) cadr))

se obtiene el resultado

((aa bc) cd)

Sin embargo no he podido encontrar esta función en la SLIB documentación, que he consultado.

Hace un procedimiento de este tipo ya existen?
Si no, ¿qué sería un nombre adecuado para el procedimiento, y cómo usted orden de sus argumentos?

¿Fue útil?

Solución

No tengo un muy buen nombre para la función.Me estoy pegando mi aplicación a continuación (me has llamado map-traversing;otros sugieren un mejor nombre).He hecho el argumento fin de espejo de map sí.

(define (map-traversing func data)
  (if (list? func)
      (map map-traversing func data)
      (func data)))

El uso de datos de ejemplo, tenemos:

(map-traversing `((,car ,cdr) ,cadr) '(((aa . ab) (bb . bc)) (cc cd . ce)))

El segundo ejemplo se requiere SRFI 26.(Permite escribir (cut * 2 <>) en lugar de (lambda (x) (* 2 x)).)

(map-traversing `(,(cut * 2 <>) (,(cut * 3 <>) ,(cut * 5 <>))) '(100 (10 1)))

La cosa más importante es que sus funciones deben ser no cotizadas en bolsa, a diferencia de su ejemplo.

Otros consejos

He encontrado que con la siguiente definición de mapa el recorrido, no es necesario, cierro la cita de las funciones:

(define (map-traversing func data)
  (if (list? func)
      (map map-traversing func data)
      (apply (eval func (interaction-environment)) (list data))))

Nota:en mi versión instalada de la Astucia, debido a alguna razón, sólo (interacción con el medio ambiente) no se plantea la variable Independiente de error.Los otros entornos es decir,(esquema-informe-medio ambiente 5) y (null-medio ambiente 5) elevar este error.

Nota 2:Posteriormente, he encontrado en [1] que para (esquema-informe-medio ambiente 5) y (null-medio ambiente 5) a trabajar, primero necesita (el uso de los módulos (cie-9 r5rs))

[1]: http://www.mail-archive.com/bug-guile@gnu.org/msg04368.html "Re:guile -c "(esquema-informe-medio ambiente 5)" ==> ERROR:Independiente de la variable:esquema-informe-medio ambiente"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top