From what I understand, this is setting up an error trap, but I'm not entirely clear on how it works, especially in modern InterSystems IRIS environments.
Could someone please help explain:
What exactly does this line do?
Is %ETSDK a standard system routine? I can't find it in our environment.
What is the best practice for error trapping now — should we be using $ETRAP instead of $ZT?
Sabe lo que piensas, con sólo unas preguntas es capaz de adivinar el personaje en el que has pensado.
¿Te atreves?
Algunos conoceréis el juego Akinator, en el que un genio es capaz de adivinar el personaje en el que has pensado, mientras respondes «sí» o «no» a unas simples preguntas.
No hay una IA analizando tus redes sociales, No hay micrófonos escuchando... ¿Y cómo lo hace?
El secreto es un sencillo algoritmo y mucha gente jugando y alimentando la base de datos.
¿Cómo funciona?
Definamos un término: Nodo.
Un nodo puede ser una pregunta o el nombre del personaje.
Si es una pregunta, tendrá dos respuestas: Sí o No.
Ahora vamos a darle un valor.
A la pregunta le daremos el Id 1, a la respuesta afirmativa, le daremos el Id 2 y a la respuesta negativa, el Id 3.
Ahora imaginemos que tanto la respuesta afirmativa como la negativa devuelven otra pregunta, con los personajes correspondientes para «sí» y «no».
Podemos ver un patrón entre las preguntas y las respuestas.
Las respuestas afirmativas son el doble del identificador de la pregunta, y las negativas son el doble del identificador de la pregunta más uno.
Entonces, si tenemos el nodo n, el siguiente nodo a mostrar será el nodo n*2 si la respuesta es "sí" o el nodo (n*2)+1 si la respuesta es "no".
Pongamos un ejemplo:
Supongamos que pienso en Snoopy, y la pregunta es «¿Tu personaje es ficticio?», la respuesta “sí” nos dirá que el personaje en el que hemos pensado es «Superman», pero no es correcta.
¿Cómo convertimos nuestra respuesta en una pregunta que nos lleve a Snoopy?
Necesitamos una característica que nos diferencie de Superman, en este caso preguntaremos «¿Tu personaje es un perro?», entonces, la respuesta afirmativa sería “Snoopy” y la negativa «Superman».
Esta nueva pregunta sustituirá el Id del nodo «Superman», el personaje “Snoopy” tendrá el doble del nodo de la nueva pregunta y el personaje «Superman» tendrá el doble del nodo de la nueva pregunta más uno.
De este modo, si creamos muchas preguntas y respuestas, nuestro Iris-nator podrá adivinar cualquier personaje que se te haya ocurrido.
¿Cómo funciona Iris-nator?
Crear una tabla con información de los nodos:
Class Irisnator.Data.Nodes Extends%Persistent
{
/// NodeIdProperty NodeId As%Numeric;/// Text of the nodeProperty Text As%String(MAXLEN = "");/// Type of node (0 = text, 1 = question)Property Question As%Boolean [ InitialExpression = 0 ];/// Verb of the questionProperty Verb As%String(MAXLEN = "");
}
Nota: ¿Por qué hay un campo llamado «verbo»? porque está pensado para responder en inglés, la pregunta se muestra como {verbo} su personaje {texto} ? por lo tanto, necesita saber cual es el verbo (is, had, does, etc...) que va al inicio de la frase.
El front-end está creado con Angular19, para comunicarme con IRIS, he creado varios métodos API:
GET localhost:52773/irisnator/api/node/:nodeId
Devuelve la información sobre el nodo, también el NodId para la respuesta Sí y No
Cuando Iris-nator no ha sido capaz de adivinar tu personaje, rellenamos un formulario con los datos del nuevo personaje, y cuál sería la pregunta a realizar para diferenciarlo del personaje al que había llegado.
Entonces, movemos el personaje actual a respuesta «no», y ponemos el id a la nueva pregunta.