Câu hỏi đó có vẻ hơi tò mò và thú vị đối với tôi. Vì vậy, tôi đang cố gắng để tìm ra những gì là tính toán lambda là, tìm một câu trả lời và muốn hiển thị nó để OP (tất cả các gợi ý đã được cho thấy thực sự, cảnh báo spoiler).
Thứ nhất, cho phép thử để xác định lại f
:
λ> let f = (\g x y z -> x^3 - g(x + g(y - g z) + g(z^2)))
f ::
(Integer -> Integer) -> Integer -> Integer -> Integer -> Integer
chức năng Vì vậy, chúng tôi đã có, trong đó có chức năng và 3 số và gửi lại câu trả lời. Sử dụng curring chúng ta có thể thêm g
nét ngay tại đây, như f_new = f g
:
λ> 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
Chúng tôi đã hoàn tất. Hãy kiểm tra xem:
λ> f 0 0 0
-13
Câu trả lời là chính xác.
UPD:
Trong những ví dụ let
chỉ là một cách để khai báo hàm trong các thông dịch viên, vì vậy câu trả lời cuối cùng là:.
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)
Nguồn
2011-11-20 00:09:57
'f = lật lật ((1 +) ap ((+). (2 *). (^ 2)) (10 *)). (lật.) ap ((.). (.). (.). (-). (^ 3)) (((ap id.).). lật lật (lật id. (^ 2)). (liftM2 (liftM2 (() (.) (. – fuz