He intentado codificar un álgebra relacional en Scala (que según mi conocimiento tiene uno de los sistemas de tipos más avanzados) y simplemente no encuentro una manera de llegar a donde quiero .Características del lenguaje para implementar el álgebra relacional
Como no soy tan experimentado en el campo académico del diseño de lenguaje de programación, realmente no sé qué función buscar.
Entonces, ¿qué características del lenguaje se necesitarían, y qué idioma tienen esas características, para implementar un álgebra relacional estáticamente verificada?
Algunos de los requisitos: A Tuple es una función que asigna nombres desde un conjunto estáticamente definido de nombres válidos para la tupla en cuestión a valores del tipo especificado por el nombre. Permite llamar a este tipo de nombre establecer el dominio.
una relación es un conjunto de tuplas con el mismo dominio de tal manera que el rango de cualquier tupla es uniqe en el Conjunto
Hasta ahora el modelo eaisly puede ser modelado en Scala simplemente por
trait Tuple
trait Relation[T<Tuple] extends Set[T]
El vals, vars y defs en Tuple es el conjunto de nombre de tipo definido anteriormente. Pero no debería haber dos defs en Tuple con el mismo nombre. También vars y definiciones impuras probablemente también deberían estar restringidas.
Ahora viene la parte difícil:
Una combinación de dos relaciones es una relación donde el dominio de las tuplas es la unión de los dominios de las tuplas operandos. De modo que solo se conservan las tuplas que tienen los mismos rangos para la intersección de sus dominios.
def join(r1:Relation[T1],r2:Relation[T2]):Relation[T1 with T2]
deberían hacer el truco.
Una proyección de una relación es una relación en la que el dominio de las tuplas es un subconjunto del dominio de tuplas de operandos.
def project[T2](r:Relation[T],?1):Relation[T2>:T]
Aquí es donde no estoy seguro de si es posible encontrar una solución. ¿Qué piensas? ¿Qué características del lenguaje se necesitan para definir el proyecto?
Implicado por encima del curso es que la API tiene que ser utilizable. Capas y capas de texto repetitivo no son aceptables.
Me encantaría que me proporcionara algunas claves para descifrar lo que escribió en el segundo párrafo ... –