Описание тега letrec

Рекурсивная конструкция let, например, в схеме, тогда как "правая часть" может относиться к определяемому имени. Называя неявно определенную процедуру, мы можем использовать ее повторно, т.е. вызывать ее рекурсивно.
1 ответ

Летрек в Скала? (Неизменный способ "завязать узел?")

Предположим, у меня есть глупый маленький класс case, например: case class Foo(name: String, other: Foo) Как я могу определить a а также b неизменно так, что a.other является b, а также b.other является a? Предоставляет ли scala какой-либо способ "з…
06 июн '12 в 00:26
2 ответа

В чем преимущества letrec как функции языка программирования

Я посмотрел на все, что я могу найти о letrec, и я до сих пор не понимаю, что он привносит в язык как функцию. Кажется, что все, что можно выразить с помощью letrec, можно так же легко написать как рекурсивную функцию. Но есть ли причины выставлять …
4 ответа

Как мне написать функцию для создания круговой версии списка в OCaml?

Можно создавать бесконечные циклические списки, используя let rec, не прибегая к изменяемым ссылкам: let rec xs = 1 :: 0 :: xs ;; Но могу ли я использовать эту же технику для написания функции, которая получает конечный список и возвращает его беско…
20 окт '14 в 21:50
1 ответ

Схема летрека бесконечной среды

В настоящее время я пишу метациркуляционный оценщик в Scheme, следуя инструкциям книги SICP. В упражнении меня просят выполнить letrecчто я делаю следующим образом: (define (letrec->let exp) (define (make-unassigned var) (list var '*unassigned*))…
11 янв '14 в 14:36
1 ответ

Почему этот код использует теневые привязки `let`?

Запуск этого кода: j = let x = 4 in let x = x * x in x в переводчике: ghci> j ... no response ... зависает с очень небольшим использованием процессора. Почему это? Я ожидал j = 16,
10 авг '12 в 13:13
2 ответа

Ocaml, реализуй freevars letrec используя наборы

Я пытаюсь реализовать letrec с использованием математической лямбда-нотации для функции, но у меня возникли трудности. Мое назначение говорит, что пусть может быть определено как p(e1) U (p(e2) - {x}) и этот letrec может быть определен как (p(e1) - …
24 мар '17 в 23:22
2 ответа

Летрек и реентерабельные продолжения

Мне сказали, что следующее выражение предназначено для оценки 0, но многие реализации Схемы оценивают его как 1: (let ((cont #f)) (letrec ((x (call-with-current-continuation (lambda (c) (set! cont c) 0))) (y (call-with-current-continuation (lambda (…
25 окт '12 в 22:15
2 ответа

Как реализовать "letrec" ​​без использования "set!"?

Как может letrec быть реализованным без использования set!? Мне кажется, что set! является императивной программной конструкцией, и при ее использовании теряются преимущества функционального программирования.
1 ответ

В чем разница между R6RS `letrec`, `letrec*`и Racket`letrec`?

И то и другое letrec а также letrec* в R6RS, но есть только letrec в ракетке нет letrec*, Каковы различия между ними?
07 дек '13 в 11:17
2 ответа

Как сопоставить шаблон 'letrec'

Я пытаюсь сделать сопоставление вызовов в letrec с помощью match-lambda. Мне кажется, что эта картина: (match-lambda (`(letrec ((,<var> ,<val>) . (,<vars> ,<vals>)) ,<expr> . ,<exprs>) `(<match>)) должны соо…
1 ответ

Понимание хвостовой рекурсии 2

Первоначально я опубликовал один вопрос " понимание хвостового рекурсивного ответа вектора -> списка", и это дополнительные вопросы. мое общее понимание схемы действительно расплывчато. поэтому у меня теперь есть еще несколько вопросов: ;;;;;; origi…
09 май '14 в 07:51
1 ответ

Может ли локальная процедура быть привязанной к переменной в letrec без использования лямбды?

Я новичок в схеме. Раньше я делал подобные программы, используя letrec и linding. (define (drop l n) (letrec ((iter (lambda(ls x) (cond ((null? ls) ls) ((> x 1) (cons (car ls) (iter (cdr ls) (- x 1)))) (else (iter (cdr ls) n)))))) (iter l n))) (d…
17 авг '15 в 11:02
16 ответов

Какие языки поддерживают * рекурсивные * функциональные литералы / анонимные функции?

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

Haskell `let` связывания в лямбда-исчислении

Я хочу понять как let привязки работают в Haskell (или, может быть, лямбда-исчисление, если реализация Haskell отличается?) Я понял из чтения Пишу вам Haskell, что это действительно для одного let связывание. let x = y in e == (\x -> e) y Это име…
06 янв '19 в 05:08
2 ответа

Почему не letrec как починить?

В статье Fixing Letrec: точная, но эффективная реализация рекурсивной связывающей конструкции схемы Dybvig et al. сказано что (выделено мое): Теоретическим решением этих проблем является ограничение letrec так что его левые стороны не назначены, а п…
13 июл '13 в 15:07
2 ответа

Каковы различия между "let" или "letrec" ​​и "define" для создания локальных привязок?

Я не понимаю, в чем различия (извините за надуманный пример): (define average (lambda (elems) (define length (lambda (xs) (if (null? xs) 0 (+ 1 (length (cdr xs)))))) (define sum (lambda (xs) (if (null? xs) 0 (+ (car xs) (sum (cdr xs)))))) (define to…
13 июл '12 в 02:15
1 ответ

Конд с локальной привязкой

Мой вопрос о переписывании вложенных условий if для одного cond с веткой, имеющей локальную привязку. Я очень новичок в Racket, просто делаю свои первые шаги, поэтому, если мой вопрос глуп, пожалуйста, будьте снисходительны. Вкратце задача состоит в…
27 фев '13 в 10:07
2 ответа

Преобразование функции, которая вычисляет фиксированную точку

У меня есть функция, которая вычисляет фиксированную точку с точки зрения итерации: equivalenceClosure :: (Ord a) => Relation a -> Relation a equivalenceClosure = fst . List.head -- "guaranteed" to exist . List.dropWhile (uncurry (/=)) -- remo…
09 июн '11 в 22:52
3 ответа

Каковы преимущества letrec?

Читая "Закаленный интриган", я начал узнавать о letrec, Я понимаю, что он делает (может дублироваться Y-Combinator), но книга использует его вместо повторения на уже defineФункция d работает с аргументами, которые остаются статичными. Пример старой …
6 ответов

Как мне использовать fix, и как это работает?

Я был немного смущен документацией для fix (хотя я думаю, что понимаю, что он должен делать сейчас), поэтому я посмотрел на исходный код. Это оставило меня более смущенным: fix :: (a -> a) -> a fix f = let x = f x in x Как именно это возвращае…
24 янв '11 в 21:34