F#

Aug. 19th, 2010 05:00 pm
109: (Default)
[personal profile] 109
начал изучать F# сегодня после обеда. похоже, что к концу дня уже и закончил. никакой дополнительной гибкости по сравнению с C# не наблюдается. взять tuples. ок, я могу сматчить первый элемент как (x, _), аналогично head в списке. а как мне сматчить остаток (e.g. tail)? или как итерировать по тупелу заранее неизвестного типа? или как динамически создать тупел, имея, скажем, список типов элементов? а ведь без перечисленного мной ничего осмысленно реляционного не написать. вот у них ничего не пошевелилось в душе, когда они хуярили эти конструкторы?

Tuple(T1)
Tuple(T1, T2)
Tuple(T1, T2, T3)
Tuple(T1, T2, T3, T4)
Tuple(T1, T2, T3, T4, T5)
Tuple(T1, T2, T3, T4, T5, T6)
Tuple(T1, T2, T3, T4, T5, T6, T7)
Tuple(T1, T2, T3, T4, T5, T6, T7, T8)


bonus: Action(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)

видимо, Билл Гейтс сказал, что 16 параметров должно быть достаточно для любого метода.

(no subject)

Date: 2010-08-20 09:39 am (UTC)
From: [identity profile] vshabanov.livejournal.com
введена из чисто маркетинговых соображений.

Ржунимагу. Тьюплы -- способ по быстрому сгруппировать небольшие кусочки данных. Используются чтобы вернуть несколько значений из ф-ии (\x -> (x,x*2), вместо out-параметров и объявлений лишних переменных), или для каких-нить сшиваний списков (типа map (\(i,x) -> f i x) $ zip [1..] data).

Т.е. тюплы в ФЯ -- это такое локальное удобство, чтобы не заводить лишних типов-записей.

Если в тюпле больше 2-3 элементов, то это уже плохой стиль (сложно поддерживать) и лучше запись заводить с нормальными именованными полями.

Хотя в теории БД используются вроде как те же кортежи (им для теории имена полей не очень важны), но на практике удобнее таки с записями работать, а не с i-ым элементом.

Т.е. тюплы -- это не маркетинговый ход, а удобная в ФП (и не только) конструкция.

А если очень надо i-й элемент -- то либо welcome в зависимые типы (которых нет ни в F# ни в Haskell), либо также, как и во всех остальных языках -- динамическая типизация (List/Array.nth i [StringField "asdf", IntField 123, NullField]) и/или навернутый поверх нее маппер в записи и обратно.

F# хоть и убог, но всяко мощнее дельфи и уж точно может сделать то, что что дельфи могла ещё в прошлом веке.

(no subject)

Date: 2010-08-21 01:34 am (UTC)
From: [identity profile] 109.livejournal.com
я и не спорю, что туплы для чего-то другого могут быть полезны. для того, что мне нужно - нет. хотя могли бы.

Profile

109: (Default)
109

March 2019

S M T W T F S
     12
3456789
101112131415 16
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags