Clojure impresses

Dec 10, 2012 14:58

Нашему Clojure-проекту исполнилось полгода, из них последние три месяца его используют заказчики. Пора подводить промежуточные итоги ( Read more... )

наглядный пример, девелопмент, инструментарий, clojure, fp, и такое было

Leave a comment

kashnikov December 10 2012, 18:12:15 UTC
О непервоклассности макросов, например, для Scheme Вам возможно будет интересно посмотреть: http://okmij.org/ftp/Scheme/macros.html#ck-macros

Возможно такой

Небольшой кусочек из http://okmij.org/ftp/Scheme/CK.scm

; Composable syntax-rules macros via the CK abstract machine
;
; We demonstrate (mutually-) recursive, higher-order applicative
; macros with clausal definitions, defined in the style that looks very
; much like that of ML or (strict) Haskell.
; We write composable, call-by-value--like macros without
; resorting to the continuation-passing-style and thus requiring no
; macro-level lambda. The syntax remains direct-style, with
; nested applications.

; This project was the answer to the question posed by Dan Friedman
; on Mar 20, 2009:
; Write the macro 'permute' that takes any number of arguments and returns
; the list of their permutations
;
; (permute a b c) ==> ((a b c) (b a c) (b c a) (a c b) (c a b) (c b a))
; The order of the entries in the list is immaterial. One should write
; permute without resorting to CPS.
;
; Our answer is the transliteration of the standard Haskell code
; implementing the straightforward algorithm for all permutations:
; perm :: [a] -> [[a]]
; perm [] = [[]]
; perm (h:t) = concatMap (ins h) (perm t)
; ins :: a -> [a] -> [[a]]
; ins x [] = [[x]]
; ins x (h:t) = (x:h:t) : map (h:) (ins x t)
; We shall see that our code looks pretty much like the above,
; but with more parentheses.

Reply

thesz December 10 2012, 19:16:19 UTC
Могу ли я взять и написать ((permute a b) c) и получить результат, как (permute a b c)? Если могу, то это первоклассные объекты. Если нет, то нет.

Reply

geekyfox December 10 2012, 19:42:50 UTC
насколько я путаю лиспы,

(permute a b c) - это (в хаскелевской нотации) не обязательно
permute a b c, а возможно ещё и синтаксический сахар вокруг
permute [a,b,c]

ответ на вопрос о том, как вот в это воткнуть карринг, по моему очевиден.

Reply

thesz December 10 2012, 19:53:26 UTC
Здесь не карринг воткнуть. А сделать первоклассный объект. И ответ мне здесь совсем не очевиден.

Reply

geekyfox December 10 2012, 20:31:35 UTC
А, понял вопрос. В Common Lisp - нельзя.

Reply

kashnikov December 10 2012, 20:29:20 UTC
> Могу ли я взять и написать ((permute a b) c) и получить результат, как (permute a b c)?

Нет, так написать Вы не можете.

Reply

kashnikov December 10 2012, 20:42:52 UTC
Я правильно понимаю, что Вы хотите первоклассность в классическом смысле? Из Вашего примера не совсем понятно, но близко к тому.

Reply

thesz December 10 2012, 20:59:23 UTC
Да. Чем больше первоклассных объектов, тем проще их комбинировать.

Reply

kashnikov December 10 2012, 21:23:57 UTC
Если я правильно Вас понял, то такие макросы должны будут раскрываться во время исполнения. Какой тогда в них смысл я не совсем понимаю. ;-)

Reply

thesz December 10 2012, 21:41:37 UTC
Вот-вот. Смысла в макросах не так, чтобы уж много.

Reply


Leave a comment

Up