Bu soru benim için ilginç ve ilginç görünüyor. Yani, ben lambda hesabı olduğunu, bir cevap bulmak ve OP (tüm ipuçları zaten, spoyler uyarısı gösterdi aslında gösterildi) göstermek istiyorum anlamaya çalışıyorum. fonksiyonu ve 3 rakamları elde cevap dönmek
λ> let f = (\g x y z -> x^3 - g(x + g(y - g z) + g(z^2)))
f ::
(Integer -> Integer) -> Integer -> Integer -> Integer -> Integer
Yani, elimizdeki fonksiyonu,:
Öncelikle, f
yeniden tanımlamak için deneyelim. Biz f_new = f g
gibi burada g
tanımını ekleyebilirsiniz ve tamamen kuruması kullanma: Bitirdik
λ> let f = (\g x y z -> x^3 - g(x + g(y - g z) + g(z^2))) (\x -> 2*x^2 + 10*x + 1)
f :: Integer -> Integer -> Integer -> Integer
. Haydi kontrol edelim: Cevabınız evet.
UPD: bu örnekler let
olarak
yorumlayıcı işlev bildirmek için bir yöntemdir, bu nedenle son cevap:.
f :: Num a => a -> a -> a -> a
f = (\g x y z -> x^3 - g(x + g(y - g z) + g(z^2))) (\x -> 2*x^2 + 10*x + 1)
'f = Flip ((1 +) p ((+). (2 *). (^ 2)) (10 *)). (çevir). ap ((.). (.). (.). (-). (^ 3)) (((ap id.).) Çevirme çevirin (flip id. (^ 2)). (liftM2 (liftM2 (+)).). (. ((ap id.). (. flip id). (.). (-))). (.). (.). (+)) ': f lambdabot tarafından anlamsız yapılan – fuz