Карри и дизайн компилятора

Это домашнее задание:

Объясните, какие преобразования тип подпрограммы претерпевает при частичной параметризации.

До сих пор я понимаю, карри. Но я не могу найти никаких ресурсов о том, как подобная функция реализуется компилятором в памяти. Могу ли я указать правильное направление, возможно, ключевые слова для поиска или ссылки на ресурсы, или, возможно, объяснение того, как компилятор генерирует таблицу типов и символов среди прочего, связанного с вопросом.

Благодарю.

2 ответа

Решение

Карринг - это преобразование n аргументных функций в n унарных функций:

Например, если у вас есть троичная функция f:: t1 x t2 x t3 -> t, вы можете представить эту функцию как

f1 :: t1 -> (t2 -> (t3 -> t))

Другими словами, f1 - это функция, которая принимает аргумент типа t1 и возвращает функцию типа f2.

f2 :: t2 -> (t3 -> t)

f2 - это функция, которая принимает аргумент типа t2 и возвращает функцию типа f3.

f3 :: t3 -> t

f3 - это функция, которая принимает аргумент типа t3 и возвращает тип t.

Например, если f(a,b,c) = a+b*c, тогда:

f3(C) == c1+c2*C where c1 and c2 are constant.
f2(B) == f3(C) where c1 is constant and c2 is replaced with B.
f1(A) == f2(B) where c1 is replaced with A.

В функциональных языках функции являются гражданами первого класса, поэтому обычно они используются в качестве возвращаемого типа.

Карринг похож на фиксацию параметра функции. Что вам действительно нужно изменить, так это прототип функции, которая называется.. если у вас есть, например, retn_type function(param1, param2) и вы каррируете его по первому параметру, устанавливаете его на фиксированное значение и получаете новую функцию retn_type(param2) это можно назвать и передать по-другому от оригинала.

На самом деле вы можете получить его в компиляторе разными способами или взломать, но суть его простоты в том, чтобы просто переопределить новую версию, которая связана с первой. Поэтому, когда вы звоните retn_type(param2) Вы выполняете тот же код первой функции, предполагая, что параметр1 задан при помощи curryfication.

Другие вопросы по тегам