You are viewing the community [info]ru_lambda

Лямбда - функциональное программирование [entries|archive|friends|userinfo]
Лямбда - функциональное программирование

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

(no subject) [May. 28th, 2012|05:47 pm]
tiny_haskeller
Есть у меня некие типы данных, условно говоря, такие

data T1 = Q | B String | R | ........
data T2 = Left | Right | Potato Int | .....
data TT = TT T1 T2

Нужен мне для работы тип ТТ, но в силу специфики предметной области в 99% процентов случаев это будет одна из 20-30 комбинаций, поэтому мне удобно завести функции вида

f1 = TT Q Left
f2 = TT Q (Potato 7)
f3 = TT R Right
...
f20 = TT (B "Last One") (Potato 0)

чтобы количество текста сократить, тем более, что все эти f1 - f20 - устоявшиеся и всем известные названия; кроме того хочется мне при обработке типа ТТ повторно их использовать, чтобы не писать вновь 20 раз

process (TT Q Left) = ...
process (TT Q (Potato 7)) = ...
process (TT R Right) = ...
...
process (TT (B "Last One") (Potato 0))) = ...
process (TT a b) = universalProcessing a b

а иметь нечто в духе

process (id -> f1) = ...
process (id -> f2) = ...
process (id -> f3) = ...

и так далее.

Как такое можно сделать?
link6 comments|post comment

Coq. [May. 13th, 2012|11:11 am]

miserakl
Как доказать в Coq 1<=0 -> False?
link39 comments|post comment

Курочки невидимки [Apr. 28th, 2012|02:34 pm]

hanmaudziro
читаю Fun with type functions; Oleg Kislov, SPJ
дошел до раздела про мемоизацию, не совсем понял как она работает и стал проверять на примерчике
Read more... )
link12 comments|post comment

Вышел русский перевод книги "Learn You a Haskell for Great Good!" [Apr. 4th, 2012|10:58 am]

afiskon
В русском переводе книга называется "Изучай Haskell во имя добра!". Если кто-нибудь не в курсе, это замечательный учебник по Haskell, лучше вы скорее всего нигде не найдете, тем более в печатном варианте и на русском языке.

Заказ можно оформить тут: http://www.dmk-press.ru/catalog/computer/prog_lang/izuchay_haskell_vo_imya_dobra/ или на Озоне. На Озоне говорится, что книга поступит 13-го апреля. Цена - 389 рублей.
link13 comments|post comment

Безусловный интерпретатор LISP на LISP [Feb. 27th, 2012|10:32 am]

codedot
Здравствуйте!

У меня возникла задача, которую можно сформулировать целиком в терминах языка LISP.

Требуется найти такие функции encode, decode и reduce, что

(decode (reduce … (reduce (encode (quote expr))) … ))

для некоторого конечного количества применений reduce является результатом интерпретации выражения expr, в котором можно ограничиться переменными и lambda одного аргумента, причем возвращаемое значение encode — это рекурсивное S-выражение memory с циклами без атомов, а функция reduce должна иметь следующий вид:

(lambda (memory)
	(set (c[ad]*r memory) (c[ad]*r memory))
	(set (c[ad]*r memory) (c[ad]*r memory))

	…

	(set (c[ad]*r memory) (c[ad]*r memory))

	memory
)

Был бы признателен за помощь в решении данной задачи.

Заранее спасибо.
link2 comments|post comment

Парсеры для Ur/Web. [Feb. 13th, 2012|03:57 pm]

miserakl
А как на Ur строки парсить можно?

(По идее, pure комбинаторы на Окамле могут скомпилироваться почти без изменений, но вроде всё виденное на Окамле использует ссылки и мутабельность.)
link21 comments|post comment

Haskell+web [Feb. 4th, 2012|11:32 am]

permea_kra
Товарищи писатели вебни на хаскеле! Здесь же есть такие?

Мне нужно (для личных нужд) написать веб-приложение на хаскеле, работающее с базой. Будут храниться блобы  (0.2-5 Мб) с описанием в базе (да, именно в базе, а не в файловой системе) и раздаваться авторизованным пользователям. Плюс интерфейс загрузки - отдачи, плюс контроль прав.

Существо я исключительно ленивое, поэтому чем проще в использовании будет решение, тем лучше. Какие решения вы посоветуете? А то пока я подумываю о написании CGI приложения в лоб, т.е. без сторонних библиотек, но это как-то не комильфо.
link9 comments|post comment

quick check & test data generator [Jan. 27th, 2012|02:50 am]

jdevelop
привет, вопрос такого порядка - у меня есть несколько файлов, из которых построчно надо считать данные и сложить их в списки (скажем 5 списков)

дальше по этим спискам надо нагенерить комбинаций по 5 - выбрать случайный элемент из каждого списка и получить кортеж

курение документации и примеров по quickcheck не позволило ответить на вопрос - как передать в class Arbitrary Cortege списки, прочитанные из файла?

пока варианты - записать списки в IORef, а внутри arbitrary через unsafeIO их читать, но это какой-то аццкий хак получается.

как правильно?
link16 comments|post comment

case x of [Jan. 23rd, 2012|01:46 am]

kkirsanov
[Tags|]

В тренировочных целях пишу парсер простенького бинарного формата и столкнулся с не очевидным, для меня, поведением.
Я побитово читаю данные и перевожу автомат между состояниями: parse :: Word8->ParseState->ParseState
и получении некотрых конкретных значений - я меняю состояние.

Сами эти значения я записал заранее:
data State = S1|S2|S3

b1 = 123
b2 = 213

parse b s = case (b, s) of
        (b1, S1) -> S2
        (_ , S1) -> S3
        (b2, S2) -> S1


При этом оказывается что
(parse 2 S1) = S2
, хотя я хочу что бы сработало второе правило.
причину такого поведения я кажется понял, теперь хотелось бы найти способ столь же красиво и лаконично это записать.
link12 comments|post comment

[F#] Скрестить комбинаторы с FsYacc [Jan. 18th, 2012|06:39 pm]

dimitrykakadu
[Tags|, , , ]

Имеется парсер на комбинаторах. Предположим что восстановить грамматику из комбинаторов мы можем. Хочется (автоматически) заменить код на комбинаторах на вызов FsYacc.

Проблема: Парсер комбинаторы парсят потоки Char а FsYacc хочет полноценный лексер (lexbuf и функцию из lexbuf в токены)
Возможное решение: навелосипедить свою библитеку комбинаторов, где она будет принимать что-то лексероподобное, но посложнее чем просто поток символов.
Ещё возможное решение: Оставить поток сиволов как есть, а некоторые парсер функции считать кусками лексера и превращать в регулярки, например. Т.е. из комбинаторов генерить свой лексер.

Лично мне первое какжется по-проще.

А вы бы как сделали?

P.S. Чуть по-конкретнее, ибо меня уже завалили вопросами.
На входе: дотнетовский класс, где методы --- это парсер-функции (т.е. имеют тип _ -> result)
На выходе: дотнетовский класс, где вызовы некоторых методов подменены на вызовы fsyacc (Но типы те же и снаружи кажется, что ничего не поменялось)

Здесь "некоторые методы" это методы, которые программист захотел сделать на fslex.
Основные грабли: fsyacc ходит парой с fslex. А комбинаторы обычно парсят сразу поток сиволов (без токенизации, т.е. им лексер не нужен)
Т.е. надо или как-то навелосипедить свои комбинаторы которые принимают не поток символов, а что-то лексеро-подобное. Либо из кода комбинаторов получать тем или иным образом информацию о лексере и генерить кроме кода на fsyacc код для fslex (что-то звучит страшновато)

Надеюсь что-то прояснилось.
linkpost comment

navigation
[ viewing | most recent entries ]
[ go | earlier ]