Estoy tratando de generar una tabla de verdad para una expresión booleana dada. Podría hacer esto con la creación de un nuevo Datatype BoolExpr, pero quiero hacerlo con una función anónima. Se supone que debe funcionar así:Tablas de verdad de funciones anónimas en Haskell
> tTable (\x y -> not (x || y))
output:
F F | T
F T | F
T F | F
T T | F
Mi enfoque:
tbl p = [(uncurry p) tuple | tuple <- allval]
where allval=[(x,y) | x <- [False,True], y <- [False,True]]
Esto funciona, pero sólo para 2 argumentos. Quiero hacerlo por cualquier cantidad de Argumentos. Así que pensé que iba a hacer una función que toma los argumentos de una lista:
argsFromList f [] = f
argsFromList f (x:xs) = argsFromList (f x) xs
Esto no funciona:
Occurs check: cannot construct the infinite type: t = t1 -> t
Expected type: t -> [t1] -> t1 -> t
Inferred type: (t1 -> t) -> [t1] -> t1 -> t
In the expression: argsFromList (f x) xs
No entiendo cuál es el problema aquí. Estaría muy agradecido si alguien pudiera dirigirme en la dirección correcta o publicar un enlace que sí lo haga.
posible duplicado de [¿Por qué no se permite dicha definición de función en haskell?] (Http://stackoverflow.com/questions/6168880/why-is-such-a-function-definition-not-allowed-in- haskell) –
Tenga en cuenta que puede definir la lambda como '(\ [x, y] -> not (x || y))', que automáticamente le da el comportamiento de una "función con arbitrariamente muchos argumentos del mismo tipo ". – leftaroundabout