Програмирање на нивоу функција
У информатици, програмирање на нивоу функција се односи на једну од две супротстављене парадигме програмирања које је идентификовао Џон Бакус у свом раду на програмима као математичким објектима, други је програмирање на нивоу вредности.
У свом предавању поводом добијања Тјурингове награде 1977, Бакус је навео оно што је сматрао да је потребно да се пребаците на другу филозофију дизајна програмског језика:[1]
Изглед програмских језика је у невољи. Сваки наредни језик укључује, уз мало чишћење, све карактеристике својих претходника плус још неколико. [...] Сваки нови језик, тврди нове и модерне карактеристике ... али чињеница је да је неколико програмских језика довољно јефтиније или више поузданије да оправда трошкове производње и учење да се користе.
Он је дизајнирао ФП да буде први програмски језик да конкретно подржи стил програмирања на нивоу функција.
Програм на нивоу функција је слободна променљива (види програмирање без тачака), јер програмске променљиве, које су од суштинског значаја у дефиницијама о вредности нивоа, нису потребне у програмима на нивоу функција.
Увод
[уреди | уреди извор]У стилу програмирања на нивоу функција, програм се гради директно из програма који се дају на почетку, комбинујући их са програмским формирањима операција или функција. Тако је у супротности са приступом вредности нивоа који се односи на дате програме на вредности да се формирају сукцесије вредности кулминирано у жељеној вредности резултата, приступ на нивоу функција примењује програм за обликовање операције датим програмима да се формира редослед програма што је кулминирало у програму жељеног резултата.
Као резултат тога, приступ програмирању на нивоу функција позива студију простора програма у оквиру програма за формирање операција, у потрази за извођење корисних алгебарских својстава ових програма формира операцију. Приступ на нивоу функција нуди могућност израде скупа програма математички простор наглашавањем алгебарски својства операција програма формира преко простора програма.
Још једна потенцијална предност погледом на нивоу функција је способност да се користе само строге функције и на тај начин имају одоздо према горе семантику, које су најједноставније врсте свега. Још једна предност је постојање дефиниција на нивоу функција које нису подигнуте (односно, подигнута из нижег вредности нивоа на виши функције нивоу) слике било које постојеће на нивоу вредности: те (често сажет) дефиниције на нивоу функција представљају да моћнији стил програмирања није доступан у вредностима нивоа и, вероватно, често је лакше да се разуме и разлог о томе.
Разлика од функционалног програмирања
[уреди | уреди извор]Када је Бакус студирао и објавио свој стил програмирања на нивоу функција, његова порука је углавном погрешно схваћена, дајући подстрек стилу традиционалним функционалним програмским језицима уместо његовом ФПу и његовом наследнику ФЛу.[2]
Бакус зове функционално програмирање апликативно програмирање; његово програмирање на нивоу функција је посебан, ограничен тип апликативног програмирања.
Кључна разлика од функционалних језика је да Бакус 'језик има следећу хијерархију типова:
- атоми
- функције, које узимају атоме до атома
- Функције вишег реда (које он назива „функционалне форме“), који узимају једну или две функције од функције
... и једини начин за генерисање нових функција је да користите једну од функционалних облика, који су фиксни и не могу изградити свој функционални облик (барем не у ФП, можете у ФФП (Формални ФП)).
Ово ограничење значи да функције у ФПу су модули (настале услед уграђених функција) у односу на алгебре функционалних форми, па су самим тим алгебарски послушане. На пример, опште питање равноправности две функције је еквивалентно халтинг проблему, и неодлучност, али једнакост две функције у ФПу је само једнакост у алгебри, и на тај начин (Бакус замисли) је лакше.
Чак и данас, многи корисници Ламбда стил језика често погрешно тумаче Бакус 'функционални ниво приступа као рестриктивне варијанте ламбда стила, који је де фацто вредности нивоа стила. У ствари, Бакус је не би слагао са „рестриктивном“ оптужбом: он је тврдио да управо због таквих ограничења која су добро формирана математички простор може настати, на начин аналоган начину структурираног програмирања граница на одређену верзију свих могућности за контролу токова доступних у равници, неограничење неструктурираних програма.
Вредност слободног стила ФП је уско повезана са једнакосном логиком картезијанске-затворене категорије.
Пример језика
[уреди | уреди извор]Канонски програмски језик на нивоу функција је ФП. Други укључују ФЛ, ФПР и Ј.
Види још
[уреди | уреди извор]- Програмирање на нивоу вредности, императивно програмирање (контраст)
- Функционално програмирање, декларативно програмирање (упоредити)
- Парадигме програмирања
- Цевоводно програмирање
- Прећутно програмирање
- Конкатенативни програмски језик
Референце
[уреди | уреди извор]- ^ „Can Programming Be Liberated from the von Neumann Style?” (PDF).
- ^ Hudak, Paul. „Conception, Evolution, And Application Of Functional Programming Languages”. ACM Computing Surveys. 21 (3). 1989.