Retourner au contenu associé (journal : Haskell -- Évaluation paresseuse)
Posté par cimcim le 03 mai 2016 à 17:53. En réponse au journal Haskell -- Évaluation paresseuse. Évalué à 1.
Je ne connais pas Haskell, mais l'évaluation ou non des paramètres d'une fonction, ça me fait penser à un passage d'argument par valeur ou par pointeur/réference...
En c:
int resultat( int longCalculA, int longCalculB ) { if( !longCalculA ) return longCalculA; else return longCalculB; } void main() { resultat( longCalculA(), longCalculB() ); }
exécutera les 2 fonctions pour pouvoir passer leur valeurs de retour en arguments.
Alors qu'en passant les adresses des fonctions en arguments:
int resultat( int (*longCalculA)(), int (*longCalculB)() ) { int a = longCalculA(); if( !a ) return a; else return longCalculB(); } void main() { resultat( &longCalculA, &longCalculB ); }
Seul longCalculA() sera exécuté si il retourne 0.
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル
# valeur vs pointeur
Posté par cimcim . En réponse au journal Haskell -- Évaluation paresseuse. Évalué à 1.
Je ne connais pas Haskell, mais l'évaluation ou non des paramètres d'une fonction, ça me fait penser à un passage d'argument par valeur ou par pointeur/réference...
En c:
exécutera les 2 fonctions pour pouvoir passer leur valeurs de retour en arguments.
Alors qu'en passant les adresses des fonctions en arguments:
Seul longCalculA() sera exécuté si il retourne 0.