Pages: [1]   Go Down
Print
Author Topic: currificazione  (Read 2429 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
rox
Forumista
***
Offline Offline

Posts: 633


« on: 10-05-2014, 10:55:22 »

Salve a tutti ragazzi, non ho molto chiara la currificazione…
quello che ho capito io è questo:

se abbiamo una funzione del tipo


lambda(x y)=lambda(lambda(x) lambda(y) x y )


ovvero se prendiamo per esempio la moltiplicazione possiamo scrivere che:

mult(x y)= mult2(lambda(x) lambda(y) (x*y))


cioè la funzione mult che prende 2 parametri, può essere scritta come una funzione superiore mult2 tale che prende un solo parametro e restituisce la funzione lambda (y)( ovvero una funzione che prende in input il secondo parametro e che all'interno ha già il primo parametro datogli dalla funzione lambda (x) ). La funzione lambda(y) a sua volta andrà a fare x*y e ci darà finalmente il risultato … ho capito bene oppure sono in errore? …
 
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 3.081



WWW
« Reply #1 on: 10-05-2014, 17:52:56 »

Le cose dette in prosa alla finesono corrette.
Quelle scritte formalmente sono assurdita'.

lambda(x y)=lambda(lambda(x) lambda(y) x y )

Questa cosa non ha senso!

ovvero se prendiamo per esempio la moltiplicazione possiamo scrivere che:

mult(x y)= mult2(lambda(x) lambda(y) (x*y))


E questa ne ha anche meno!!!!!!!!!!!


Penso tu intenda la cosa seguente:
prendiamo la funzione moltiplicazione, di due argomenti.

mult(x,y) = x*y

la sua versione currificata sarebbe una funzione che prende un numero
e restituisce una funzione che prende un numero e restituisce un numero.

Usando il formalismo simil lambda-calcolo, la funzione multcurr
sarebbe definita da
multcurr = lambda x. lambda y.  (x*y)

Salutoni
FB
Logged
rox
Forumista
***
Offline Offline

Posts: 633


« Reply #2 on: 11-05-2014, 12:45:48 »

ok il concetto allora l'avevo capito bene  professore scusi ma prendendo in esempio questa sua affermazione:
Code:
Let us conside the following Scheme function

(define High-inc (lambda (x) (lambda ( y) (+ x y))))

allora se scrivo in questo modo
Code:
(define mult2 (lambda(x) lambda(y) (* x y))

sarebbe corretto?
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #3 on: 11-05-2014, 19:58:07 »

Ho capito la vostra incomprensione: praticamente tu fin dall'inizio hai usato quel simbolo "=", che, a onor del vero, non ha molto senso quando si parla di programmazione funzionale , non in quella pura almeno pray., e lasciò pure me un po' perplesso .

Poi, in questo tuo secondo messaggio, hai fatto uso dell'operatore define del linguaggio Scheme, e tutto ha quadrato: ora capisco cosa intendevi con quella assegnazione "=".

In ogni caso, secondo la sintassi che abbiamo scelto di usare nella nostra programmazione funzionale, si scrive lambda variabile/i corpo, cosa che tu non avevi fatto.

Tuttavia, confermo che avevi ben capito il "senso" di cosa volevi fare, ma lo hai espresso in modo formalmente impreciso, ma con il chiarimento del tuo secondo messaggio rispondo che, sì, è corretto anche ciò che hai scritto nella seconda define.

Piccola nota mia personale, giusto per permettere alla tua giovane mente di scappare il più presto possibile da sotterfugi e "zuccheri sintattici" che, secondo me, proprio come gli zuccheri (carboidrati), se non controllati, provocano un disagio (la dieta ipercalorica fa male): la programmazione funzionale (pura) ha l'indubbio vantaggio di permettere allo studioso e suo utente di dimenticarsi completamente di un concetto come "nome" di funzione; la funzione ha dignità nel suo ruolo, cioè in ciò che fa, e non nel nome mnemonico che le diamo.

Quando, giustamente, per brevità tu scrivi (define mult2 ...termine...), non fai altro che prendere ...termine..., e dargli un nome mnemonico per poter usare facilmente quello stesso termine dopo, senza dover riscrivere per intero tutto il termine, ma guarda che potevi benissimo riscrivere tutto il termine (con addirittura variazioni di nome su variabili legate tramite alfa conversione -che non cambia il senso del termine ai fini della computazione-, e lì sono tutte legate!), lasciando magari il tuo interprete di linguaggio un po' spaventato dall'enormità della lunga espressione da ridurre (almeno a occhio ecco), ma certamente non causando altri guai di sorta!
« Last Edit: 11-05-2014, 19:59:38 by ɹǝǝuıƃuǝsɹǝʌǝɹ » Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 3.081



WWW
« Reply #4 on: 12-05-2014, 15:00:52 »


allora se scrivo in questo modo
Code:
(define mult2 (lambda(x) lambda(y) (* x y))

sarebbe corretto?


Si.

FB
Logged
rox
Forumista
***
Offline Offline

Posts: 633


« Reply #5 on: 12-05-2014, 18:56:27 »

eh si reverse, a questo punto direi che l'incomprensione era data dall'uso del simbolo "= "  testate
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #6 on: 12-05-2014, 20:07:36 »

eh si reverse, a questo punto direi che l'incomprensione era data dall'uso del simbolo "= "  testate
Sì, ma come ho scritto poco sotto, la sintassi per le astrazioni funzionali rispetta la formulazione:

λ variabili . corpo

Quindi aver scritto λ (λ ...) non si poteva proprio vedere testate.
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 3.081



WWW
« Reply #7 on: 15-05-2014, 15:37:12 »

Quindi aver scritto λ (λ ...) non si poteva proprio vedere testate.

Qualcuno riesce quindi a comprendere le mie sofferenze.....   

FB
Logged
Pages: [1]   Go Up
Print
Jump to: