Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-02-2011, 22:34   #1
alegioit
Senior Member
 
Iscritto dal: Jan 2005
Messaggi: 307
[LISP] Problema chiusure

ciao, sto scrivendo il progetto per un esame e mi sto davvero incasinando sulle chiusure ( che credevo di aver capito, ma sto incontrando alcuni problemi ).
In sintesi per il progetto ho una lista che contiene delle funzioni ( che, come sapete sono liste anch'esse ) ad ognuna di esse ci devo aggiungere un argomento ( in sintesi se una funzione è " (princ (+ x y) " gli devo poter aggiungere z ); questo mi serve per creare un piccolo linguaggio ad oggetti in lisp, in particolare nel caso in cui chiamo una funzione che contiene il riferimento all'oggetto stesso ( il this di java ).
Avevo pensato di creare questo utilizzando due chiusure successive, ma non riesco proprio a venirne a capo.

Il problema che sto incontrando è riassumibile nel seguente esempio.
Costruisco la seguente funzione:

(defun prova (x y z)
(funcall (lambda (x y) (funcall (lambda (z) (+ x y z)) z)) x y))

in sintesi dovrei chiudere successivamente z e x y.
Fin qui tutto ok dato che se do nel listener:

(prova 1 2 3)

ottengo 6 che è il risultato aspettato.

Se invece definisco:

(defun prova2 (x y z metodo)
(funcall (lambda (x y) (funcall (eval (list 'lambda '(z) metodo)) z)) x y))

e do nel listener:

(prova 1 2 3 '(+ x y z))

mi da errore dicendomi che le variabili x ed y sono unbound, però non riesco assolutamente a capire perchè........
alegioit è offline   Rispondi citando il messaggio o parte di esso
Old 24-02-2011, 00:14   #2
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da alegioit Guarda i messaggi
ciao, sto scrivendo il progetto per un esame e mi sto davvero incasinando sulle chiusure ( che credevo di aver capito, ma sto incontrando alcuni problemi ).
In sintesi per il progetto ho una lista che contiene delle funzioni ( che, come sapete sono liste anch'esse ) ad ognuna di esse ci devo aggiungere un argomento ( in sintesi se una funzione è " (princ (+ x y) " gli devo poter aggiungere z ); questo mi serve per creare un piccolo linguaggio ad oggetti in lisp, in particolare nel caso in cui chiamo una funzione che contiene il riferimento all'oggetto stesso ( il this di java ).
Non riesco a capire come vorresti aggiungere questo argomento in piu'
puoi fare un esempio ? Nel tuo caso intendi dire che il comando sopra deve diventare cosa ?
Codice:
(princ (+ x y) z)
o
Codice:
(princ (+ x y z))
(ah ricordati di usare il tag [ code ] per il codice )

Quote:
Avevo pensato di creare questo utilizzando due chiusure successive, ma non riesco proprio a venirne a capo.

Il problema che sto incontrando è riassumibile nel seguente esempio.
Costruisco la seguente funzione:

(defun prova (x y z)
(funcall (lambda (x y) (funcall (lambda (z) (+ x y z)) z)) x y))

in sintesi dovrei chiudere successivamente z e x y.
Fin qui tutto ok dato che se do nel listener:

(prova 1 2 3)

ottengo 6 che è il risultato aspettato.

Se invece definisco:

(defun prova2 (x y z metodo)
(funcall (lambda (x y) (funcall (eval (list 'lambda '(z) metodo)) z)) x y))

e do nel listener:

(prova 1 2 3 '(+ x y z))

mi da errore dicendomi che le variabili x ed y sono unbound, però non riesco assolutamente a capire perchè........
(dalla notazione provo a dedurre che state usando Common Lisp)
Mi vien da dire che e' perche' quando fai tu costruisci la funzione con
Codice:
(eval (list 'lambda '(z) metodo))
non hai accesso alle variabili al di fuori di (eval ...), perche' stai praticamente chiamando "al volo" il compilatore.

Perche' non raccogliere tutto in un'unica lambda ?
Codice:
(defun prova3 (x y z metodo)
  (funcall (eval (list 'lambda '(x y z) metodo)) x y z))
Non fa questo quel che ti serve ?
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2011, 18:48   #3
alegioit
Senior Member
 
Iscritto dal: Jan 2005
Messaggi: 307
Si, hai ragione su tutto... infatti io pensavo le stesse cose che mi hai risposto, ma non riuscivo a capire come scrivere il progetto.
Dopo un po' di domande al prof. salta fuori che il progetto è talmente scritto male che in tre abbiamo capito tre cose diverse.... in sintesi quello che non capivo come scrivere, semplicemente, non si poteva scrivere ed infatti stavo cercando di arrampicarmi sugli specchi in tutti i modi.

Insomma se avesse scritto nel progetto quello che ci ha detto, avrei completato il progetto in 2 giorni e non in 2 settimane.....

va beh, almeno ho imparato un bel po' di cose durante la scrittura e la riscrittura del codice
alegioit è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2011, 23:52   #4
Don[ITA]
Senior Member
 
L'Avatar di Don[ITA]
 
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
Mi ricorda il progetto che ho fatto in lisp l'anno scorso xD

Scusate l'ot :P
__________________
iMac 27" 5K
Don[ITA] è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Paramount non molla: Netflix è pr...
Missione Artemis II diretta verso la Lun...
Toy Story 5 arriva al cinema: è l...
Intel cambia rotta su Linux? Nuove assun...
Samsung aggiorna Bixby con One UI 8.5: p...
L'Etiopia vieta le auto a combustione: a...
Pirateria audiovisiva: la Guardia di Fin...
Ubisoft conferma due nuovi Far Cry in sv...
Chi vincerà il Festival di Sanrem...
G42 e Cerebras portano in India un super...
Offerte aggiornate del weekend Amazon: 7...
4 MacBook Air in offerta e scende a 939€...
Chrome cambia il tuo modo di lavorare: o...
Minimo storico iPhone 17 su Amazon: 909€...
USA, incriminati tre ingegneri della Sil...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:17.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v