2016-02-21 7 views
2

У меня есть одна функция Haskell, которую я не понимаю, но хочу.Haskell интерпретация лямбда-функции

i :: Int 
i = ((\g x -> g x + g x) (\y -> y)) 3 

Я знаю, что такое лямбда-функция: безымянная функция. . (\x -> x) 3 занимает 3 и возвращает его, (\x y -> x+y) 3 4 занимает 3, 4 и возвращает 7. Но в этом специальном случае я не могу его интерпретировать. Я надеюсь, что вы можете мне помочь. КПП. решение для этой функции равно 6.

ответ

6

Теперь ваша функция (\y -> y) эквивалентна id. Давайте переписать функцию с помощью этого:

i = ((\g x -> g x + g x) id) 3 

Теперь примените функцию id к (\g x -> g x + g x). Это позволит получить сводится к:

i = (\x -> id x + id x) 3 

Теперь это просто:

i = id 3 + id 3 
i = 6 
+0

спасибо! таким образом, это гораздо более удобочитаемо. – Buginventor

3

(\g x -> g x + g x) принимает аргументы g, которые должны быть функцией, и x, который должен быть действительным аргументом для этой функции, и затем добавляет результат применения g к x самому себе.

В этом случае \y -> y поставляется в качестве значения для g и 3 в качестве значения для x, таким образом мы получаем (\y -> y) 3 + (\y -> y) 3. (y -> y) 3 - 3, поэтому мы получаем 3 + 3, что составляет 6.

Смежные вопросы