Árbol de búsqueda binaria en el esquema, tratando de utilizar el Dr. Raqueta para volver simplemente verdadero o falso si el valor está presente en BST. Error

votos
2

Estoy usando el Dr. raqueta, el lenguaje bastante grandes, y yo estoy tratando de hacer un simple árbol binario de búsqueda en? método, que devolverá si un valor está en el árbol de búsqueda binaria o no. Tiene que ser general, de aceptar cualquier tipo de árbol de búsqueda (si contiene cadenas, enteros, etc.), pero estoy corriendo en este mensaje de error que me está volviendo loco. Cualquier ayuda se agradece, aquí está el código:

EDITADO :: Funciona ahora, pero no con cualquier cosa, pero los números (o al menos no funciona con cuerdas) .. Nuevo número:

(define (bstsearch tree value)
  (cond 
  ((null? tree) #f)
  ((< value (car tree))
      (bstsearch  (cadr tree) value))
  ((> value (car tree))
      (bstsearch (caddr tree) value))
  ((= value (car tree))
      #t)
  ))

El error que estoy recibiendo dice:

<: expects type <real number> as 1st argument, given: horse; other arguments were: horse

Cuando usas:

 (bstsearch '(horse (cow () (dog () ())) (zebra (yak ()()) ())) horse)

como entrada.

Publicado el 05/12/2010 a las 04:46
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
2

No se debe envolver los argumentos en otro conjunto de parens, a fin de utilizar

(bstsearch  (cadr tree) value)

en lugar de

(bstsearch  ((cadr tree) value))
Respondida el 05/12/2010 a las 05:00
fuente por usuario

votos
2

Uno de los problemas es que tienes tu <y> invierte. Suponiendo que usted quiere que su sub-árbol izquierdo que es el más pequeño, entonces (<valor (árbol de coche)) debe llamar de nuevo con el (árbol cadr).

También se debe utilizar en lugar de #t (t #).

Respondida el 05/12/2010 a las 05:25
fuente por usuario

votos
3

En cuanto a su nuevo tema, <y> sólo funcionan para los números. Una solución fácil sería pasar las funciones comparar como argumentos de su procedimiento bstsearch.

Además, como se mencionó antes, por favor sangrar el código correctamente.

Respondida el 05/12/2010 a las 06:23
fuente por usuario

votos
1

Su problema recién se enfrenta es a causa de su función comparador "=". Si pasa con "iguales?" función que debería ser genérico y funciona en cualquier tipo de datos. Comparadores también deben cambiar si se quiere que sea genérico. Debe tomarlo de usuario como entrada la versión genérica de lo que debe ser:

(define (bstsearch tree value comparer)

(cond 

((null? tree) #f)

  ((equal? value (car tree)) #t)

  ((comparer value (car tree))
      (bstsearch  (cadr tree) value))

  ((not (comparer value (car tree)))
      (bstsearch (caddr tree) value))

  ))
  • la función comparador debe estar en formato de (XX -> boolean), "<", ">", "? cadena <" se construyen en los ejemplos, pero usted puede escribir su propia comparador para su propia estructura de datos también

  • Tenga en cuenta que la condición de igualdad está en la línea 2.. Espero que esto ayude :)

Respondida el 06/04/2011 a las 10:05
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more