Lenguaje de modelado: Plurales, Parte 2

Puedes mejorar plural para que funcione correctamente con más palabras. Si el proyecto aún no está abierto, vuelve a cargarlo. (El nombre de archivo sugerido era U2-Plural.)

  1. Abstracción: hacer un bloque plural-d () que se "especializa" en una sola categoría: palabras en inglés que terminan con la letra "d".
    • Comienza con una lista de las palabras con las que deseas que funcione.
    • Este bloque especialista debería funcionar correctamente para las palabras que se ajusten a su especialidad. plural-d (red) reporta 'redes' plural-d (ciudad) reporta 'ciudades', plural-d (verdad) reporta 'verdades'. Puede estar completamente equivocado acerca de las palabras que no se ajustan a su especialidadplural-d (virus) reporta 'viruses' porque el bloque plural nunca debe dar palabras a plural-d a menos que esas palabras terminen con "d".
    • Prueba plural-d ()plural-d () con una variedad de palabras para asegurarte de que funciona de la manera que deseas. Luego usa mapear para probarlo en toda la lista que hiciste anteriormente.
      Haz clic para obtener una sugerencia sobre cómo crear una lista de prueba de palabras que comienzan con "h".
      Porque sabes lo que hace mantener elementos (última letra de (ranura de entrada vacía)= d) de (lista(día, ciudad, jefe, red, caja, pared, camello, bruja, unidad, amigo, verdad))(el final de la imagen está cortado), puedes usar su salida como entrada para una prueba de plural o plural-h:
      mapear (plural ()) sobre (mantener los elementos donde (última letra de ()= d) de (lista(día, ciudad, jefe, red, caja, pared, camello, bruja, unidad, amigo, verdad)))
  2. Abstracción: el lenguaje a menudo tiene casos especiales. En español, los plurales de algunos sustantivos agregan "s"; algunos agregan "es"; sustantivos como "pez" y "disfraz" se convierten en "peces" y "disfraces", cambiando sus letras finales antes de agregar "es". Y más. Para una tarea de programación tan compleja, es (generalmente) mejor dividirla en partes, manejar cada parte por separado con su propio procedimiento (su propio bloque) y luego tener el bloque de "nivel superior", en este caso, plural, en sí mismo: usa esos especialistas. Es decir, en lugar de codificar cada pequeño detalle directamente en plural, es más limpio y claro hacer que plural se vea así.
    definición abstracta de plural: si h = última letra de la palabra, reportar h-caso plural; si y = última letra de la palabra, reporte y-caso plural; si es otro caso, utiliza un bloque que se especialice en ese caso; etc.; sino reportar unir palabra s

    Mostrar la estructura del método, solo la estrategia general, en el bloque de "nivel superior" y dejar los detalles en bloques separados es una parte de una idea informática importante llamada abstracción. La abstracción mantiene su código claro, legible y más fácil de depurar. También ayudará a que tu código sea más flexible.

  3. Cuando confíes en tu nuevo bloque especialista, edita plural para usar el especialista. Prueba (puedes usar mapear) para asegurarte que plural todavía funciona para todas las palabras para las que solía funcionar, así como para las nuevas.
  4. Crea plural-y para manejar palabras como plural-l (pincel) reporta 'piceles' (bandejas) y plural-l (papel) reporta 'papeles'
  5. Recuerda, cualquier especialista puede cometer errores si se le pide que haga un trabajo que no es de su especialidad. Por ejemplo:
    plural-l (virus) reporta 'viruses'
    Asegúrate que plural dé a plural-l solo palabras que sepa manejar correctamente.
    Guarda tu trabajo
  1. Extiende plural para manejar correctamente una palabra de entrada que tiene un espacio al final.

    En este momento, si a plural se le da una palabra con un espacio al final, deja ese espacio en plural:
    plural (amigo) reporta 'amigo s'. Hay un espacio después de 'amigo' en la entrada y un espacio entre 'amigo' y 's' en el valor reportado.
    Averigua cómo manejar este caso especial y edita plural para que el resultado sea
    plural (amigo) reporta 'amigos'. Hay un espacio después de 'amigo' en la entrada pero no hay espacio en el valor reportado.
    Ya tienes un bloque que se especializa en hacer plurales de palabras que no tienen un espacio al final. Úsalo.

    ¡Sorpresa! Una vez que plural funcione para un solo espacio al final de una palabra, intenta darlePlural (amigo). Hay seis espacios después de 'amigo' en la entrada.. ¡Eso también funciona! ¿Pero por qué?

  2. Actividades desafiantes ¿Tu bloque de plurales todavía se siente desordenado, a pesar de que los detalles sobre cómo manejar cada posible última letra están resumidos en bloques especializados? Una forma de mejorar esta situación es usar otro tipo de abstracción llamada programación dirigida a datos.
    1. Comienza por hacer una lista de pares clave-valor, con las últimas letras como claves y los procedimientos especializados como valores:
      asignar a (especialistas en plural) a (lista (lista (h) (plural anillado-h ( ) bloque)) (lista (y) (plural anillado-y ( ) bloque)) (lista (f) (plural anillado-f ( ) bloque)) (lista (x) (anillado (unir( ) (es)) bloque)) (lista (...) (...)))
      Para crear el segundo elemento de cada lista pequeña, busca el bloque que deseas, colócalo en la segunda entrada de lista, luego haz clic en el bloque con el botón derecho y elige "encapsular". Como muestra el ejemplo "x", no tiene que ser un bloque llamado plural-algo. Solo tiene que tener una ranura de entrada vacía donde desea que vaya la palabra.
    2. Luego, en tu procedimiento plural, puedes reemplazar la mayoría de los bloques si con
      variables de programa (par)
                            asignar (par) para (encontrar el primer elemento (anillado ((elemento (1) de ( )) = (última letra de (palabra)))) en (plural especialistas))
                            si (es (par) una (lista)?) {
                                 reportar (llamada (elemento (2) de (par)) con entradas (palabra))
                            }

      Buscar primero es una función de orden superior que funciona de manera similar a mantener, pero reporta solo del primer elemento que se encuentra. Es equivalente a elemento (1) de (mantener).

      El bloque llamar en la paleta no incluye el "con entradas" en la imagen; cuando haces clic en su flecha derecha, esas palabras aparecerán junto a una ranura de entrada. El primer espacio de entrada del bloque llamar es el anillo gris vacío, lo que significa que llamar necesita un bloque en ese espacio de entrada. Cuando arrastras el elemento 2 del par a esa ranura, el anillo permanece a su alrededor. Por lo general, eso es lo que queremos cuando usamos llamar, pero no esta vez. Haz clic con el botón derecho en el bloque elemento de y selecciona "desencapsular" en el menú.

      Puedes experimentar con llamar para ver qué más puedes hacer con él. ¿Qué sucede si no desmarcas el bloque elemento? ¿Qué sucede si omites el "con entradas" y la segunda entrada?
    3. No hay razón para que las claves tengan que ser letras individuales. Por ejemplo, en inglés, es necesario fijarse en más de una letra en algunos casos. Modifica el código en plural para que compare todas las subcadenas finales de la palabra con la lista de especialistas. Es decir, si la palabra es "ditch" (zanja), buscará en la lista de especialistas "ditch", luego "itch", luego "tch", "ch" y finalmente, si no encuentra nada más, "h ." pondrías
      lista (ch) (bloque anillado (unir ( ) (es)))
      en la lista, y luego a las palabras que terminen en "ch" se les agregaría "es". Este mecanismo es muy general; funciona incluso para casos especiales como
      lista (child) (anillado (palabra (children)))
      (Tendrás que definir la función palabra que solo reporta su entrada; es necesaria porque no puede escribir letras directamente en un anillo). Ahora tienes un bloque plural realmente despejado. E incluso funcionará para un idioma que no sea inglés, si haces una lista especializada diferente.
    4. Si modificas la prueba de la subcadena final para que, en lugar de darse por vencido si no puede encontrar la última letra de la palabra como una clave, ve un paso más allá y busca una clave vacía en la lista especializada, y agrega
      (elemento ( ) (anillado (unir ( ) (s))))
      a la lista, entonces puedes estar seguro de que todas las palabras posibles coincidirán con eso, al menos, por lo que ya no necesita el si. Tu bloque plural ahora puede ser solo de una línea: reportar (llamar (elemento 2 de (la subcadena final más larga....
    5. Para un desafío adicional, modifica tu prueba de subcadena final para que un signo más en la clave coincida con cualquier vocal (servirá como un carácter comodín), para que puedas hacer esto:
      lista (...) (lista (+y) (anillada (unir ( ) (s)))) (lista (y) (anillada (unir (todas menos la última letra de ( )) (s)))) (. ..)
Guarda tu trabajo