Perché haskell richiede più regole di riscrittura a seconda della tecnica di composizione della funzione e della lunghezza? c'è un modo per evitarlo?Haskell Riscrivi regole e composizione delle funzioni
Ad esempio, dato il seguente codice ...
{-# RULES
"f/f" forall a. f (f a) = 4*a
#-}
f a = 2 * a
questo funziona per
test1 = f (f 1)
però abbiamo bisogno di aggiungere una regola per
test2 = f . f $ 1
e
test3 = f $ f 1
lasciandoci con le seguenti regole
{-# RULES
"f/f1" forall a. f (f a) = 4 * a
"f/f2" forall a. f . f $ a = 4 * a
"f/f3" forall a. f $ f $ a = 4 * a
#-}
Tuttavia, quando abbiamo stringa di questi insieme o utilizzare altre forme di composizione delle regole non sparano.
test4 = f . f . f $ 1
test5 = f $ f $ f $ 1
test6 = f $ 1
Perché è questo? Devo scrivere regole di riscrittura per ogni possibile implementazione?
Non lo so, ma suppongo che sia perché le regole di riscrittura non si applicano alle funzioni che hai importato. E '$' e '.' sono solo funzioni importate dal Preludio. –