я получил задачу использовать самое левое внешнее сокращение для следующего выражения:
f inc expo 9 (f (*2) expo 3 1)
Inc определяется как:
inc :: Int -> Int
inc x = x+1
экспо определяется как:
expo :: Int -> Int
expo x = expo (x*2)
и f как:
f :: (Int->Int) -> (Int-> Int) -> Int -> Int -> Int
f g h a b = g(a-b)
Я совершенно не знаю, с чего начать сокращение с большим количеством функций. Прочитал намек, что редекс не содержится ни в каких других редексах, но не понял ;(.
Буду признателен за каждый совет/помощь.
expo
он никогда не прекратится - person DiegoNolan   schedule 31.01.2014h
в определенииf
) никогда не используется (т.е. никогда ни к чему не применяется). - person fjh   schedule 31.01.2014f g h a b = g(a-b)
и посмотрите, какие g h a b находятся вf inc expo 9 (f (*2) expo 3 1)
. Это создаст выражение с использованиемinc
,expo
,9
и(f (*2) expo 3 1)
. Следующим шагом будет выполнение редукции (если хотите, замены), без которой вы не сможете вычислить g (a-b). И так до тех пор, пока вы не получите значение типаInt
(или функцию, но в этом случае вы получите Int) - person Sassa NF   schedule 31.01.2014expo
expo
никогда не прекратится» - person DiegoNolan   schedule 31.01.2014