2011-12-28 7 views
0

Я хочу реализовать строгие функции сгибания, изнутри Haskell: Возможно ли это? Я читал, что макросы Lisp можно использовать для переопределения языка в огромной степени, давая вам возможность эффективно выходить из функциональной парадигмы всякий раз, когда вам нужно, и формировать ее в персонализированную парадигму, которая выполняет свою работу в наиболее аккуратном возможно. Я действительно не знаю, что такое lisp, поэтому может быть неправильным.Есть ли функциональное представление для строгой оценки?

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

Итак, как бы вы реализовали следующее изнутри haskell?

foldl' = -- ??? 
foldl1' = -- ??? 

Я подозреваю, что это как-то связано с Монадами и/или продолжением прохождения.

+1

LISP является * * принципиально отличается от Haskell. Во всяком случае, макрос LISP, хотя он имеет возможность добавлять * много новых форм, вряд ли может сделать LISP по своей сути ленивым (хотя HoFs/CPS можно использовать во многих случаях) или добавить поддержку продолжения - за исключением того, что диалект уже фундаментальные свойства для этого. И я полагаю, нет никаких макросов, которые могут сделать стандартный диалект LISP, такой как Haskell ;-) LISP все еще LISP, способность легко отбирать DSL. –

+5

Вы всегда можете просто щелкнуть ссылку «source» в [документации] (http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-List.html#g:3), чтобы как они реализованы в стандартной библиотеке. – hammar

+4

Обратите внимание, что строгая 'foldr' будет работать против духа этой функции, способность (начинать) давать результаты без оценки рекурсивного вызова является важной точкой. –

ответ

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