Брежу

May. 23rd, 2006 12:18 pm
lomeo: (лямбда)
[personal profile] lomeo
Наконец то выучил функцию sequence.
Теперь не буду писать:

foldr (liftM2 (:)) [[]] [[1,2],[3,4],[5,6]]

Напишу по человечески:

sequence [[1,2],[3,4],[5,6]]

Заодно вспомнил, что такое {}.
Теперь буду писать всякую пургу:

case [1] of (:){} -> True

Date: 2006-05-25 08:50 am (UTC)
From: [identity profile] thesz.livejournal.com
А что такое {}?

(я серъезно не знаю;)

Date: 2006-05-25 09:09 am (UTC)
From: [identity profile] lomeo.livejournal.com
означает "любые параметры конструктора".
Вот допустим
data Foo = Foo Int Int Int

ты можешь написать для паттерн-матчинга Foo _ _ _, а можешь {}

Date: 2006-05-25 09:37 am (UTC)
From: [identity profile] thesz.livejournal.com
О! Вилдкард. Здорово. Буду использовать.

Спасибо. ;)

Date: 2006-05-25 09:45 am (UTC)
From: [identity profile] lomeo.livejournal.com
Ну, кроме ветвления по названиям конструкторов я больше не представляю, где это можно использовать.

Date: 2006-05-25 09:58 am (UTC)
From: [identity profile] thesz.livejournal.com
Это может кое-где упростить код и его генерацию.

Например, при создании instance Enum для терминалов языка.

Date: 2006-12-06 09:45 am (UTC)
From: [identity profile] k0l7gxb1kicxm.livejournal.com
Т.е. ежели data T = C1 A B C , то
С1 _ _ _ это C1 {}
C2 a _ _ это C1 a {}
так?

если оно так, то как С1 a _ c через {} ?

Date: 2006-12-06 10:21 am (UTC)
From: [identity profile] lomeo.livejournal.com
нет не так, {} обозначает все параметры сразу, а не частями. пример с С1 верен, с С2 нет.

Date: 2006-12-06 11:05 am (UTC)
From: [identity profile] k0l7gxb1kicxm.livejournal.com
Спасибо.

Date: 2006-06-06 12:44 pm (UTC)
From: [identity profile] -darkus-.livejournal.com
А с точки зрения кодогенерации какой вариант интереснее? С foldr или sequence?

Date: 2006-06-06 01:07 pm (UTC)
From: [identity profile] lomeo.livejournal.com
Э-э-э. Я не очень в теме, что ты имеешь в виду?

Date: 2006-06-07 05:05 am (UTC)
From: [identity profile] -darkus-.livejournal.com
Какой вариант даст более эффективный код?

Date: 2006-06-07 07:16 am (UTC)
From: [identity profile] lomeo.livejournal.com
Так sequence и есть foldr

sequence ms = foldr k (return []) ms
    where
        k m m' = do { x <- m; xs <- m'; return (x:xs) }


k здесь явный liftM2 (:)
Вот объявление liftM2:

liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }

Т.е. определения одинаковы. Может быть при оптимизации вылезут какие нибудь тонкости, но я сильно сомневаюсь, мне кажется, что время исполнения в обоих случаях будет очень близким.

Date: 2006-06-07 07:28 am (UTC)
From: [identity profile] -darkus-.livejournal.com
Да, весьма похоже на то.

Profile

lomeo: (Default)
Dmitry Antonyuk

September 2025

S M T W T F S
 123456
78910111213
14 151617181920
21222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 26th, 2026 06:39 pm
Powered by Dreamwidth Studios