Стандартный ML не имеет полиморфной рекурсии. Добавление рекурсии к модульному языку позволяет нам восстановить полиморфную рекурсию как частный случай, используя фиксированные точки эндофункторов. Например:
signature SEQ =
sig
type 'a seq
(* operations on sequences *)
end
functor BootstrapSeq (S : SEQ) =
struct
datatype 'a seq
= Nil
| Zero of ('a * 'a) S.seq
| One of 'a * ('a * 'a) S.seq
(* operations on sequences *)
end
structure rec Seq = BootstrapSeq (Seq)
Известно, что полиморфная рекурсия делает неразрешимым вывод типов. Однако определение функтора уже содержит частичную информацию о типе, а именно сигнатуру его аргумента. Достаточно ли этой информации, чтобы снова сделать вывод типа разрешимым?
1 ответ
Да, потому что подпись предоставляет «прямое объявление» полиморфного типа, поэтому его не нужно выводить рекурсивно. Кроме того, вам не нужен функтор, вы можете напрямую написать привязку рекурсивной структуры. Но это требует аннотации подписи и, следовательно, равносильно тому же.
Похожие вопросы
Новые вопросы
recursion
Рекурсия - это своего рода вызов функции, при котором функция вызывает себя. Такие функции также называются рекурсивными функциями. Структурная рекурсия - это метод решения проблемы, при котором решение проблемы зависит от решения меньших экземпляров одной и той же проблемы.
structure rec
?