Quel est le point de lambda dans le schéma?
Je suis d'apprentissage. Je sais comment utiliser les lambda et laissez expressions.
Cependant j'ai du mal à comprendre quel est l'intérêt de l'utilisation de lambda. Ne pouvez-vous pas tout faire avec laissez que vous pouvez avec lambda?
Il serait particulièrement utile pour voir un exemple d'une situation où une expression lambda est un meilleur choix que de laisser.
Une autre chose - sont il y a également des situations où les laissez est plus utile que lambda? Si donc un tel exemple serait agréable aussi bien.
Edit: je suis aussi intéressé par contraste de définir et de lambda, comme ils semblent effectuer des tâches similaires.
Mise à jour:
Merci pour l'aide tout le monde. J'ai fait un peu plus de la recherche en lambda/let/définir après la lecture de vos réponses, et maintenant le comprendre beaucoup mieux.
Je suis tombé sur un excellent exemple de cool lambda useage - de retour d'une fonction anonyme à partir de procédures. Par exemple, la procédure operateTwice
ci-dessous retourne une fonction anonyme qui est basé sur les paramètres transmis à la procédure:
(define operateTwice
(lambda (op1 op2)
(lambda (x y)
(op2 (op1 x y) y))))
((operateTwice * +) 2 3) ;equivalent to: (+ (* 2 3) 3), or in standard notation 2*3+3
De sortie:
9
Vous devez vous connecter pour publier un commentaire.
Un
let
est unlambda
.E. g.
peut être traduit en
En outre, dans le Schéma de tous de contrôle et de l'environnement, les structures peuvent être représentés par des expressions lambda et les applications de lambdas.
Donc,
lambda
est strictement plus puissant quelet
et constitue la base de la plupart des constructions intéressantes trouvées dans le Schéma.Concernant
define
etlambda
, un haut niveau dedefine
ajoute une liaison à haut-niveau de l'environnement.Lorsque vous écrivez
vous êtes en train de dire
Imbriquée définit sont convertis en
letrec
, qui peut être réécrite en utilisant les lambdas ainsi.Donc, encore une fois, beaucoup de Régime de constructions peut être traduit en quelque chose à l'aide
lambda
, et par conséquent, il est vraiment mériteraient que vous comprenezlambda
bien.Vous utilisez
lambda
si vous souhaitez créer une fonction pour l'utiliser comme un argument à une autre fonction (comme par exemplemap
), mais vous n'avez pas vraiment envie de le nom de la fonction.Par exemple, si vous souhaitez ajouter 42 à chaque nombre dans une liste, vous pouvez le faire:
Mais si vous ne voulez pas lui donner un nom à une fonction que vous utilisez seulement une fois, vous pourriez faire:
Laissez est en fait juste un raccourci pour une expression Lambda.
Les deux expressions suivantes sont équivalentes:
Lambda suit la philosophie de la langue que tout devrait ressembler à une fonction mathématique. Mais, dans la pratique, Laissez le rend plus facile de comprendre ce qui se passe si les variables sont trop nombreuses. Imaginez 10 variables qui ont leurs valeurs définies après le Lambda d'un bloc, et que vous essayez de faire correspondre chacun de ceux avec le nom de la variable, avec Laissez-les valeurs des variables sont placés l'un à côté de leurs noms, pratique pour le programmeur, mais moins conforme à la Programmation Fonctionnelle, la philosophie.
Lambda peut être utilisé pour le retour d'une fonction à partir d'un ordre supérieur de la fonction mais ne peut pas le faire. Par exemple:
Lambda peut également être utilisé pour passer d'une fonction à une fonction:
lambda crée de nouvelles fonctions anonymes, qui sont évalués à chaque fois que vous les utilisez.
laisser crée des noms temporaires de valeurs et sont fixés une fois pour une utilisation dans le cadre défini par la forme.
Ils sont vraiment très différents des bêtes.
quelques exemples :
première forme crée une fonction pour multiplier par 5
deuxième forme affecter 2 à x et la multiplie par 5 pour un total de 10
tiers, nous utilisons la fonction de 1 (qui mutiplies par 5) et de l'appeler avec 2 comme paramètre, ce qui fait 10
Dans le Schéma d'une procédure (ou fonction) est une première classe de l'objet comme une liste, un nombre ou une chaîne. Pour créer une liste littérale vous utilisez la primitive appelée
list
:Juste comme ça, pour créer une procédure, vous utilisez le
lambda
primitive (ou formulaire spécial):Que les procédures sont la principale forme d'abstraction, plan prévoit un raccourci pour
define
pour le rendre facile de lier de nouvelles procédures:Autre que cela, les procédures sont juste comme tous les autres objets de première classe. Ils peuvent être passés comme arguments à d'autres procédures et une procédure peut évaluer à produire (ou le retour) d'une autre procédure.
Vous pouvez le penser comme ça...
vous créez une fonction qui utilise une autre fonction
mais vous voulez rendre les choses plus modulaire, de sorte que vous avez à faire est d'appeler la deuxième fonction en tant qu'argument de la première, et qui vous laisse la possibilité de modifier le deuxième à chaque fois que vous vous sentez comme vous avez besoin d'une fonctionnalité...
l'espoir qui fait sens