吃什么都拉肚子怎么回事| mri是什么检查项目| 美国总统叫什么名字| 穷凶极恶是什么生肖| b族维生素什么时候吃效果最好| 大量出汗是什么原因引起的| 心肌炎用什么药治疗最好| 拔牙之后需要注意什么事项| 女人喝黄酒有什么好处| x是什么牌子的衣服| 洁身自爱是什么意思| 缓刑是什么意思还要坐牢吗| 什么的仪式| 脂肪肝可以吃什么水果| 凤凰男是什么意思| 羽下面隹什么字| es什么意思| 拉疙瘩屎是什么原因| 什么是假声| 取环需要做什么检查| winner什么意思| 医学ace是什么意思| 暑假什么时候结束| 穆赫兰道到底讲的什么| 榆钱是什么| 走马观花是什么意思| 冰瓷棉是什么面料| 梅毒通过什么传播| 卵巢早衰检查什么项目| 隐血弱阳性是什么意思| 经常梦遗是什么原因| 格拉苏蒂手表什么档次| 手抖看什么科| 梦见和妈妈吵架是什么意思| 金刚是什么意思| 嘴里发咸是什么原因| 同舟共济是什么意思| 五月二十一号是什么星座| 表哥的女儿叫什么| 医院量身高为什么会矮| 甲亢不能吃什么食物| 11是什么生肖| 吃皮是什么意思| 藕是莲的什么部位| 月经量多是什么原因导致的| 打车费计入什么科目| 特别想睡觉是什么原因| 吃丝瓜有什么功效和作用| 千年修炼是什么生肖| 不是什么而是什么造句| 肌无力吃什么药最好| 看肾挂什么科| 笙箫是什么意思| 财主代表什么生肖| 翘楚是什么意思| 上海话册那是什么意思| 低血压要注意些什么| 口腔溃疡喝什么水| 喉咙疼痛吃什么药效果最好| 撇嘴是什么意思| 什么什么致志| 5月26号什么星座| 开悟是什么意思| 梦见捡到很多钱是什么意思| 子宫小结节是什么意思| 对付是什么意思| 硬盘是什么| 2008是什么年| ccf是什么| 狗狗细小是什么症状| 梦见眼镜蛇是什么预兆| 唐氏宝宝是什么意思| 扁平足适合穿什么鞋| 一米阳光是什么意思| 肚脐上面疼是什么原因| 甲沟炎看什么科| 高血压可以吃什么肉| 1988属什么生肖| 韩世忠为什么不救岳飞| 什么清什么秀| 王母娘娘属什么生肖| 火龙果和香蕉榨汁有什么功效| hcv是什么意思| 8月23是什么星座| 例假淋漓不尽是什么原因造成的| 睡不醒是什么原因| 痘痘挤出来的白色东西是什么| 鸭子什么意思| 什么球不能踢| 充电宝什么品牌最好| 牙齿矫正挂什么科| 孕育是什么意思| 刚刚怀孕有什么症状| 吃什么降血压效果最好| 七月十六是什么星座| 检查血糖挂什么科| 湄公鱼是什么鱼| 宫颈息肉吃什么药能消| 荨麻疹什么样| 铁蛋白偏高是什么原因| 备注是什么意思| 肺部散在小结节是什么意思| 惗是什么意思| 口臭胃火大吃什么药好| 小孩掉头发是什么原因引起的| 星芒是什么意思| 金贵肾气丸治什么病| 精彩是什么意思| 花生什么时候成熟| 贵族是什么意思啊| 阴毛瘙痒是什么原因| o型血是什么血| 什么的废墟| 鹅蛋脸适合什么样的发型| 一个木一个西读什么| 什么虫咬了起水泡| 鸡和什么属相相冲| 放下是什么意思| 什么是腰间盘突出| 螺旋菌感染有什么危害| 验尿能检查出什么| 经常跑步对身体有什么好处| 广东有什么市| 鸡伸脖子张嘴用什么药| 营长是什么级别| 蓝字五行属什么| 肠胀气是什么原因引起的| 助产士一般什么学历| 松花粉是什么| 无痛肠镜和普通肠镜有什么区别| 排尿带血是什么原因| 什么叫偏光眼镜| 扁平疣是什么原因长出来的| 画龙点睛什么意思| 梅毒滴度是什么意思| 梦见四条蛇是什么意思| 燊读什么| 置换补贴什么意思| 宫颈ecc是什么意思| ps医学上是什么意思| 7.14日是什么日子| 尿隐血阳性是什么病| 猫条是什么| 人生的尽头是什么| 煤气罐在什么情况下会爆炸| 五浊恶世是什么意思| 吸顶灯什么牌子的好| 什么是气压| 素数是什么| 血管堵塞有什么办法可以疏通| 冷敷眼睛有什么好处| 轻度脑梗吃什么药最好| 吃什么盐最好| wbc白细胞高是什么原因| 结婚5年是什么婚| 几成是什么意思| jumper是什么衣服| 胃窦是什么意思| 脚气挂什么科| tr什么意思| 直击是什么意思| 开市是什么意思| 龋齿是什么样子的图片| 言谈举止是什么意思| 室内机漏水是什么原因| 自在什么意思| 脖子长痘痘是因为什么原因| 蝙蝠怕什么| 溶媒是什么| 指桑骂槐是什么生肖| 脚底发热是什么原因| 出虚汗是什么原因引起的| 来大姨妈血块多是什么原因| 下身痒是什么原因| 如愿以偿是什么意思| 腿发软无力是什么原因引起的| 我宣你是什么意思| 孕晚期为什么会脚肿| 手淫导致的阳痿早泄吃什么药| 蝴蝶吃什么食物| 子宫直肠窝积液是什么意思| 女生排卵期有什么症状| 11.11什么星座| 什么是蚕豆病| 一个口一个且念什么字| 手背肿胀是什么原因| 脸上长水泡似的痘痘是什么原因| 脑梗塞什么症状| 有迹可循什么意思| 星星是什么| 什么叫精索静脉曲张啊| 人体最大器官是什么| 扁桃体发炎吃什么水果| 紫癜是什么引起的| syp是什么意思| 梦见吃蜂蜜是什么预兆| 甘露是什么| 晚上9点是什么时辰| 胡萝卜含有什么维生素| 山楂泡水喝有什么好处| 做梦流产了是什么意思| 胚芽是什么| 脸色发黑是什么病的前兆| 女生下体瘙痒用什么药| 燕窝补什么| 身上出现白块什么原因| 为什么会贫血| 所剩无几是什么意思| 丰年虾是什么| beryl是什么意思| 拉肚子吃什么食物| 手心脚心出汗是什么原因| 丝瓜为什么会变黑| 汉防己甲素片治什么病| 耳朵里面疼什么原因| 拔牙后吃什么食物最好| p波高尖代表什么| 穆字五行属什么| 什么持不什么| 吃什么对皮肤好| 洒水车的音乐是什么歌| ooxx是什么意思| 大梁是什么朝代| 八字加一笔是什么字| 荔枝有什么作用与功效| 身上红痣多是什么原因| bell什么意思| 涉三什么意思| 粉蒸肉用什么肉好吃| 手指倒刺是什么原因| 7月1日是什么星座| 尿酸高是什么意思| 办理健康证需要带什么| 什么咖啡好喝| 看脑血管挂什么科| 组织委员的职责是什么| 至多是什么意思| 医院五行属什么| 516是什么意思| 老人爱睡觉是什么原因| 投喂是什么意思| 结肠炎吃什么药效果最好| 高血压什么症状表现| 蓝色加黄色等于什么颜色| 澳大利亚位于什么板块| 心肌缺血吃什么食物| 孕妇做春梦是什么意思| 水印相机是什么意思| 血糖高的人吃什么水果好| 你会不会突然的出现是什么歌| dl是什么单位| 牛的尾巴有什么作用| 咽喉有异物感吃什么药| 早上八点多是什么时辰| 孕妇喝纯牛奶对胎儿有什么好处| 杭州灵隐寺求什么最灵| 生长纹是什么原因| 属虎男和什么属相最配| 为什么不建议吃三代头孢| 孩子为什么不说话| ckd5期是什么意思| ncs是什么意思| 屈膝是什么意思| 狼吞虎咽是什么生肖| 百度Vai al contenuto

大连理工大学2017年保送生招生简章 报名时间报名条件

Da Wikipedia, l'enciclopedia libera.
百度   一是带头增强“四个意识”,坚定维护以习近平同志为核心的党中央权威和集中统一领导。

In informatica la programmazione funzionale è un paradigma di programmazione in cui il flusso di esecuzione del programma assume la forma di una serie di valutazioni di funzioni matematiche. Il punto di forza principale di questo paradigma è la mancanza di effetti collaterali (side-effect) delle funzioni, il che comporta una più facile verifica della correttezza e della mancanza di bug del programma e la possibilità di una maggiore ottimizzazione dello stesso. Un uso particolare del paradigma, per l'ottimizzazione dei programmi, è quello di trasformare gli stessi per utilizzarli nella programmazione parallela.

La programmazione funzionale pone maggior accento sulla definizione di funzioni, rispetto ai paradigmi procedurali e imperativi, che invece prediligono la specifica di una sequenza di comandi da eseguire. In questi ultimi, i valori vengono calcolati cambiando lo stato del programma attraverso delle assegnazioni; un programma funzionale, invece, è immutabile: i valori non vengono trovati cambiando lo stato del programma, ma costruendo nuovi stati a partire dai precedenti.

Le funzioni matematiche sono molto potenti in termini di flessibilità ed analisi. Per esempio se una funzione è idempotente e non ha effetti collaterali, allora una chiamata a questa funzione che ha il suo stesso output come input (f(f(x))) può essere efficientemente computata con una singola chiamata alla funzione.

Questo tipo di funzioni hanno zero o più parametri e un singolo valore di ritorno. I parametri sono gli input della funzione ed il valore di ritorno è il suo output. La definizione di una funzione descrive come questa debba essere valutata (computata) in termini di altre funzioni. Per esempio, la funzione f(x) = x2 + 2 è definita in termini delle funzioni di potenza e addizione. Ad un certo punto della serie di chiamate a funzioni, il linguaggio metterà a disposizione funzioni atomiche, cioè funzioni che non richiamano nessun'altra funzione.

In un linguaggio di programmazione funzionale, le funzioni possono essere manipolate in diversi modi. Solitamente, in questi linguaggi, le funzioni sono entità di prima classe, cioè possono essere passate come parametri ad altre funzioni e possono essere restituite come valori di ritorno da altre funzioni. Ciò permette a funzioni come mapcar in Lisp e map in Haskell, che prendono una funzione e una lista come input ed applicano la funzione in input ad ogni elemento della lista, di restituire una lista dei risultati. Le funzioni possono avere dei nomi, come in ogni altro linguaggio, o essere definite anonimamente (a volte anche a run-time) usando l'astrazione lambda, ed essere usate come valori in altre funzioni.

I linguaggi funzionali permettono inoltre una tecnica chiamata currying, che permette di trasformare una funzione con parametri multipli in una funzione con un solo parametro che mappa ad un'altra funzione con un solo parametro e così via, fino all'esaurimento dei parametri. La funzione trasformata può essere applicata ad un sottoinsieme dei suoi parametri iniziali e dare come risultato una nuova funzione dove i parametri di quel sottoinsieme sono costanti e il resto dei parametri hanno valori non ancora specificati. Infine questa nuova funzione può essere applicata ai parametri rimanenti per ottenere il risultato finale. Per esempio, una funzione somma(x,y) = x + y può essere trasformata in modo tale che il valore di ritorno di somma(2) (nota che non c'è il parametro y) sia una funzione anonima equivalente alla funzione somma2(y) = 2 + y. Questa nuova funzione ha un solo parametro a cui somma 2. Questa tecnica non sarebbe possibile se le funzioni non fossero entità di prima classe.

Il Lambda calcolo può essere considerato il primo linguaggio di programmazione funzionale, anche se non fu progettato per essere eseguito su una macchina. Il Lambda calcolo è un modello di computazione progettato da Alonzo Church negli anni trenta che fornisce un modo molto formale di descrivere la valutazione di funzioni. Il primo linguaggio di programmazione funzionale, progettato per un computer, fu l'Information Processing Language (IPL), sviluppato da Newell, Shaw e Simon alla RAND Corporation per il computer JOHNNIAC, a metà degli anni cinquanta.

Un linguaggio funzionale molto migliorato fu il Lisp, sviluppato da John McCarthy, mentre si trovava al Massachusetts Institute of Technology, per i computer della serie IBM 700/7000, alla fine degli anni '50. Anche se non era un linguaggio puramente funzionale, il LISP introdusse molte delle caratteristiche oggi trovate nei moderni linguaggi funzionali.

Negli anni settanta, all'Università di Edimburgo fu creato il linguaggio ML, mentre alla fine di questo decennio verrà implementata un dialetto del Lisp basato sul lambda calcolo, denominato Scheme. Dalla metà degli anni ottanta numerosi ricercatori cercarono di implementare linguaggi puri e lazy, come LazyML, Orwell, Clean, Daisy e Miranda. La prima versione del linguaggio Haskell fu introdotta nel 1990, al fine di mettere insieme molte delle idee della ricerca sulla programmazione funzionale per creare un linguaggio puro.

Confronto con la programmazione imperativa

[modifica | modifica wikitesto]

Se paragonata alla programmazione imperativa, può sembrare che la programmazione funzionale manchi di molti costrutti spesso (ma incorrettamente) ritenuti essenziali per un linguaggio imperativo, come il C o il Pascal. Per esempio, nella programmazione funzionale rigorosa, non c'è alcuna esplicita allocazione di memoria o assegnazione di variabile, ma, comunque, queste operazioni avvengono automaticamente quando una funzione è invocata: l'allocazione di memoria avviene per creare lo spazio necessario per i parametri e il valore di ritorno e l'assegnazione avviene per copiare i parametri nel nuovo spazio allocato e per copiare il valore di ritorno alla funzione chiamante.

Entrambe le operazioni possono avvenire solo alla chiamata di una funzione e al ritorno da essa e quindi gli effetti collaterali sono eliminati. Eliminando gli effetti collaterali dalle funzioni, si ottiene ciò che viene chiamata trasparenza referenziale, che assicura che il risultato di una funzione sia lo stesso per uno stesso insieme di parametri, indifferentemente da quando e dove questa funzione venga valutata. La trasparenza referenziale rende molto più facile sia la dimostrazione della correttezza del programma sia l'identificazione automatica delle computazioni indipendenti per l'esecuzione parallela.

Le iterazioni, un altro costrutto della programmazione imperativa, sono ottenute attraverso il costrutto più generale delle chiamate ricorsive a funzioni. Le funzioni ricorsive invocano se stesse permettendo di eseguire più e più volte una stessa operazione. Può essere dimostrato che un'iterazione è equivalente ad uno speciale tipo di ricorsione chiamata tail recursion. La ricorsione nella programmazione funzionale può assumere molte forme e, in generale, è una tecnica più potente dell'iterazione. Per questa ragione, quasi tutti i linguaggi imperativi la supportano (con la notevole eccezione del Fortran 77 e del COBOL, prima del 2002).

Linguaggi di programmazione funzionali

[modifica | modifica wikitesto]

I programmi puramente funzionali (cioè quelli che obbligano a rispettare le regole del non-effetto-collaterale, trasparenza referenziale, ecc., a differenza dei linguaggi non puramente funzionali che sono un ibrido tra paradigma funzionale e imperativo) non richiedono variabili e non hanno effetti collaterali e sono di conseguenza automaticamente thread-safe. Solitamente i linguaggi funzionali fanno un uso piuttosto sofisticato dello stack.

La programmazione funzionale fa un largo uso della ricorsione e, in alcuni linguaggi come Scheme, alcuni tipi di ricorsione (come la tail recursion) vengono riconosciuti e automaticamente ottimizzati dal compilatore.

Inoltre, i linguaggi di programmazione funzionali fanno rispettare la trasparenza referenziale, il che comporta che termini uguali possono essere sostituiti con termini uguali senza modificare il risultato della computazione. Per esempio, possiamo modificare l'espressione

    z = f(sqrt(2), sqrt(2));

calcolando una sola volta la radice quadrata di 2 (sqrt(2)) e sostituendo il risultato ai due parametri

    s = sqrt(2);
    z = f(s, s);

eliminando così l'ulteriore valutazione della funzione radice quadrata.

Per quanto possa sembrare intuitivo, questo non è sempre il caso per i linguaggi imperativi. Per esempio, si consideri la "funzione" getchar() del linguaggio C, che legge un carattere dallo standard input; essa è una funzione non dei suoi parametri ma del contenuto dello stream stdin e di quanto di esso è già stato letto. Ad esempio, l'istruzione:

    z = f(getchar(), getchar());

non è equivalente al blocco:

    s = getchar();
    z = f(s, s);

in quanto in C, getchar() può restituire due valori diversi per due chiamate diverse, in dipendenza dello stato di una variabile globale(stdin).

Nei linguaggi di programmazione imperativi, generalmente, gli effetti collaterali nascosti sono la regola, non l'eccezione. Ogni volta che una procedura legge o scrive un valore da/in una variabile globale o condivisa, potenzialmente vi sono degli effetti collaterali nascosti. Questa mancanza di un preciso confine su cosa una funzione può modificare o meno porta ad un aumento della complessità nascosta dei programmi scritti in linguaggi non funzionali.

Rimuovendo questa mancanza di informazioni circa il dominio di una funzione, i linguaggi di programmazione funzionali offrono la possibilità di programmi più puliti che sono più facili da progettare e sottoporre a debugging. Comunque, questi non sono gli unici vantaggi.

Molti programmatori abituati ai paradigmi imperativi trovano difficile imparare la programmazione funzionale, la quale richiede un approccio nello scrivere i programmi completamente differente. Questa difficoltà insieme al fatto che gli ambienti dei linguaggi funzionali non hanno la stessa quantità di strumenti e librerie disponibili dei linguaggi tradizionali, sono tra le ragioni principali per cui la programmazione funzionale ha avuto poco utilizzo nell'industria del software. I linguaggi funzionali sono rimasti largamente di dominio accademico e hobbystico e quei linguaggi che hanno avuto un maggiore utilizzo sono linguaggi funzionali 'non puri', come l'Erlang e il Common LISP. Si potrebbe dire che la maggiore influenza dei linguaggi funzionali sull'industria del software sia stata data da quei programmatori, nati in ambito accademico, che hanno usato lo stile di programmazione funzionale 'non puro' con i tradizionali linguaggi di programmazione imperativi.

Funzioni di ordine superiore

[modifica | modifica wikitesto]
Lo stesso argomento in dettaglio: Funzione di ordine superiore.

Un potente meccanismo spesso utilizzato nella programmazione funzionale è quello delle funzioni di ordine superiore (o funzioni higher-order). Una funzione si dice di ordine superiore quando può prendere altre funzioni come parametri e/o restituire funzioni come risultato. L'operatore differenziale in matematica è un esempio di funzione che mappa una funzione ad un'altra funzione.

Le funzioni di ordine superiore erano studiate dalla teoria del lambda calcolo ben prima che la nozione di programmazione funzionale esistesse e sono presenti nel design di molti linguaggi di programmazione funzionali, quali lo Scheme e l'Haskell.

Più in generale si può dire che le funzioni di ordine superiore siano parte della lingua naturale. Per esempio, gli avverbi possono modificare i verbi (azioni) creando verbi derivati. Con lo stesso ragionamento si può dire che i verbi imperativi sono simili alle funzioni "ordinarie" dei linguaggi di programmazione.

Le funzioni di ordine superiore sono cruciali nel paradigma della programmazione a livello funzionale (da non confondere con la programmazione funzionale, di cui tratta questa voce), che include linguaggi come l'FP di John Backus e il J di Kenneth Eugene Iverson.

Considerazioni sull'efficienza

[modifica | modifica wikitesto]

Per lungo tempo i linguaggi funzionali sono stati etichettati come linguaggi mangia-risorse, sia in termini di CPU che in termini di memoria. Ciò per due ragioni principali:

  • alcuni dei primi linguaggi funzionali furono implementati con poca attenzione verso l'efficienza;
  • i linguaggi non funzionali guadagnavano velocità, almeno in parte, nel lasciare al programmatore alcuni compiti di livello più basso.

Questi compiti di basso livello erano il bound-checking, ovvero controllare i valori assunti dagli indici dei buffer per evitare overflow, il garbage collection, per la gestione della memoria e simili. Questi compiti sono parti essenziali dei programmi moderni e la loro sbagliata gestione è causa di buona parte dei bug del software, quali memory leak e vari tipi di overflow.

L'aumento delle prestazioni dei calcolatori ha tuttavia spostato l'attenzione della comunità informatica sullo sviluppo rapido del software, sulla sua correttezza e manutenibilità. Ciò ha facilitato l'introduzione di tecniche del tipo suddetto in linguaggi imperativi di uso comune. Ciò fa sì che oggi le performance dei linguaggi funzionali e dei linguaggi imperativi convergano. Per programmi che passano la maggior parte del tempo facendo computazioni numeriche, alcuni linguaggi funzionali (come l'Ocaml e il Clean) possono avvicinarsi alla velocità del C, mentre per programmi che gestiscono grandi matrici e basi di dati multidimensionali, i linguaggi funzionali ad array (come il J e il K) sono solitamente più veloci dei programmi C non ottimizzati. Comunque, i linguaggi puramente funzionali possono diventare considerevolmente più lenti di quelli imperativi quando manipolano grandi strutture dati, per via dell'utilizzo della memoria meno efficiente.

L'utilizzo della memoria nella programmazione funzionale può essere ottimizzato utilizzando delle strutture dati persistenti; queste strutture dati permettono ad una parte o alla totalità dei dati di essere condivisi con altri valori, rendendo la copia e la modifica relativamente economici. Queste operazioni vengono svolte in modo sicuro dato che queste strutture dati sono immutabili e di conseguenza non sorgono quelli che sono gli errori dovuti alla gestione dei puntatori, come invece avviene nelle strutture dati imperative. Tra le strutture dati persistenti comunemente usate vi sono le liste concatenate e gli alberi binari.

Le espressioni nei linguaggi funzionali possono essere valutate (computate) in due modi diversi: in modo 'rigoroso' (o anche 'eager' o 'strict') o in modo 'pigro' (o 'lazy'). I 'linguaggi rigorosi' computano tutti gli argomenti di una funzione prima di valutare la funzione stessa, mentre i 'linguaggi pigri' computano un argomento solamente quando questo è richiesto. L'Haskell è il più comune esempio di linguaggio pigro, mentre il linguaggio ML è rigoroso. La valutazione lazy è teoricamente meno efficiente di quella rigorosa, in quanto è richiesto all'esecutore del linguaggio di mantenere informazioni in merito agli argomenti valutati e non valutati. Tuttavia, è facile concepire percorsi di esecuzione nei quali, non venendo effettivamente usati uno o più argomenti, la tecnica lazy guadagna in velocità (ciò è in special modo verosimile quando gli argomenti di una funzione sono essi stessi chiamate ad altre funzioni, potenzialmente innestate a più livelli di profondità).

Le performance competitive dei moderni linguaggi funzionali (non puri) come l'Ocaml e l'SML ha portato alla loro adozione in aree di computazione scientifica storicamente dominate dal Fortran. Questi linguaggi moderni, grazie alla loro concisione ed espressività e grazie alla disposizione di sofisticate strutture dati e algoritmi, sono oggi utilizzati in vaste aree scientifiche, quali l'analisi numerica.

Linguaggi funzionali

[modifica | modifica wikitesto]

L'esempio più vecchio di linguaggio funzionale è il Lisp, anche se né il LISP originale né i Lisp moderni, come il Common Lisp, sono puramente funzionali. Le varianti del Lisp includono il Logo, lo Scheme, Dylan e Clojure. Esempi di linguaggi funzionali moderni sono l'Haskell e i linguaggi della famiglia ML, quali ML e OCaml. Un altro linguaggio derivato da ML è F#, sviluppato da Microsoft all'interno del framework .NET. Scala invece gira sul Java Runtime Environment (JRE).

Altri sono l'Erlang, Mathematica, il Clean e Miranda.

Altri linguaggi, come per esempio Ruby, Python, Perl e TCL, possono essere usati in stile funzionale, dato che hanno funzioni di ordine superiore e altre astrazioni utili.

Oggi si sta cercando anche di sviluppare linguaggi di programmazione funzionali quantistici, cioè che possano esprimere algoritmi quantistici. Alcuni esempi sono il linguaggio di Peter Selinger (EN) qui descritto ed il linguaggio Haskell-like QML.

  • (EN) Cousineau, Guy and Michel Mauny. The Functional Approach to Programming. Cambridge, UK: Cambridge University Press, 1998.
  • (EN) Felleisen, Matthias, Robert Findler, Matthew Flatt, and Shriram Krishnamurthi. How to Design Programs HTDP. MIT Press. 2001. on-line
  • (EN) Graham, Paul. ANSI Common LISP. Englewood Cliffs, New Jersey: Prentice Hall, 1996.
  • (EN) Hudak, Paul. "Conception, Evolution, and Application of Functional Programming Languages." ACM Computing Surveys 21, n. 3 (1989): 359-411.
  • (EN) Pratt, Terrence, W. and Marvin V. Zelkowitz. Programming Languages: Design and Implementation. Terza ed. Englewood Cliffs, New Jersey: Prentice Hall, 1996.
  • (EN) Salus, Peter H. Functional and Logic Programming Languages. Quarto volume di Handbook of Programming Languages. Indianapolis, Indiana: Macmillan Technical Publishing, 1998.
  • (EN) Thompson, Simon. Haskell: The Craft of Functional Programming. Harlow, England: Addison-Wesley Longman Limited, 1996.

Voci correlate

[modifica | modifica wikitesto]

Altri progetti

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
  • (EN) functional language, su Enciclopedia Britannica, Encyclop?dia Britannica, Inc. Modifica su Wikidata
  • (EN) Why Functional Programming Matters di John Hughes
  • (EN) "Functional Programming"[collegamento interrotto]—Quarto capitolo di Advanced Programming Language Design di Raphael Finkel, una spiegazione introduttiva della programmazione funzionale
  • (EN) Functional programming in Python (di David Mertz): parte 1, parte 2, parte 3
Controllo di autoritàThesaurus BNCF 64923 · LCCN (ENsh87007844 · GND (DE4198740-8 · BNE (ESXX547935 (data) · BNF (FRcb121910539 (data) · J9U (ENHE987007541542105171
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica
hrd阳性是什么意思 阴唇外翻是什么原因 例假推迟是什么原因引起的 南五行属什么 高压偏低有什么危害
感冒干咳无痰吃什么药 什么是我的 始于初见止于终老是什么意思 梅花开在什么季节 min代表什么
专员是什么职位 河豚吃什么 田螺小子是什么意思 胃癌是什么原因引起的 lv的全称是什么
胸口堵是什么原因 足度念什么 阴帝是什么 中段尿是什么意思 女生小便带血是什么原因
肠子长息肉有什么症状hkuteam.com 子宫肌瘤吃什么药好hcv9jop7ns1r.cn 阴唇黑是什么原因hcv8jop7ns8r.cn 蚂蚁搬家是什么意思hcv9jop4ns2r.cn 吃什么对胃最好hcv9jop2ns6r.cn
壬子五行属什么hcv7jop6ns4r.cn 懵的意思是什么hcv9jop0ns3r.cn 白细胞低吃什么药可以增加白细胞hcv8jop3ns4r.cn 过敏期间不能吃什么东西hcv8jop1ns7r.cn 腿疼是什么原因引起的hcv8jop0ns2r.cn
土人参长什么样hcv9jop4ns7r.cn 冬至是什么意思tiangongnft.com 行房时间短吃什么药hcv8jop3ns2r.cn 铅华是什么意思hcv8jop6ns0r.cn 肝脏分泌什么hcv8jop6ns2r.cn
犒劳自己是什么意思hcv7jop6ns1r.cn 鼓风机是干什么用的hcv7jop7ns1r.cn jsdun是什么牌子的手表hcv9jop5ns8r.cn mpe是什么意思hcv9jop6ns9r.cn 71年出生属什么生肖hcv8jop9ns3r.cn
百度