LINUX.ORG.RU
ФорумTalks

Знатокам Haskell. Решение упражнения.


0

0

Читаю "Yet another Haskell tutorial". Делаю упражнения. Задание такое: "написать функцию map в стиле continuation passing". Как записать ее рекурсивно я понимаю
map f [] = []
map f (x:xs) = (f x : map f xs)

а вот как это сделать в continuation passing style (прошу прощения за английский, но я не знаю как это корректно по-русски называется. если кто подскажет - буду благодарен). В самом разделе, посвященном этому стилю разобран всего 1 пример, который дает не слишком много пищи для размышлений.

Могу на scheme показать, смысл должен быть понятен:

(define (c-map c-proc lst continue)
  (if (null? lst) (continue '())
      (c-proc (car lst)
              (lambda (new-car)
                (c-map c-proc (cdr lst) 
                       (lambda (new-cdr)
                         (continue (cons new-car new-cdr))))))))

И вообще, вопросу место в development. Лочу.

grob ★★★★★
()
Ответ на: комментарий от grob

cmap cproc [] continue = continue []
cmap cproc (x:xs) continue = cproc x (\newcar -> cmap cproc xs (\newcdr -> continue (newcar:newcdr)))

И соответственно обычный map выражается как

regularmap proc lst = cmap (\x continue -> continue (proc x)) lst (\x -> x)

grob ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.