Función Haskell que devuelve su entrada.
Actualmente estoy escribiendo una función para substitución (Cálculo Lambda) basada en Haskell.
data Term = Var String
| Application Term Term
| Lambda String Term
La función recibe un Term t1
, un String s
y un Term t2
. La función debe reemplazar cada ocurrencia de s
en t1
con t2
.
subst :: Term -> String -> Term -> Term
subst (Lambda y e) x v = if x == y then (Lambda y e) else let e' = (subst e x v) in (Lambda y e')
subst (Var y) x v = if x == y then v else (Var y)
subst (Application e1 e2) x v = Application (subst e1 x v) (subst e2 x v)
Cuando intento llamar a la función, recibo lo siguiente:
Entrada
subst (Lambda "x" (Application (Var "x") (Var "y"))) "y" (Var "f")
Salida
subst (Lambda "x" (Application (Var "x") (Var "y"))) "y" (Var "f")
:: Term
¿Estoy cometiendo un error en la entrada o hay un problema con mi función?
davy.ai
Parece que no hay ningún problema con tu función, ya que está mostrando correctamente el resultado con el tipo
Term
correcto. Sin embargo, es posible que desees verificar que la salida sea lo que esperas en términos de la sustitución dey
porf
en la expresión lambda. Revisar nuevamente tu sustitución prevista puede revelar cualquier problema que puedas tener.