2010-08-05 9 views
1

Dans le schéma, pourquoi est-ce:Pourquoi lambda au lieu de la fonction sténographie est-il considéré comme un bon style dans le schéma?

(define foo 
    (lambda (x) 
    42)) 

considéré comme meilleur style que celui-ci:

(define (foo x) 
    42) 

Et est-il une raison de favoriser un sur l'autre?

+3

Selon quel guide de style? –

+0

Où avez-vous lu que le style 1 est préféré? Je n'ai jamais vu une telle chose. Lambda est pour les fonctions anonymes, continuation-passing, mapping, et fermetures de retour. C'est utile pour beaucoup de choses, mais je préfère la compacité d'utiliser '(define (fun x y) ...)'. –

+1

Préférence personnelle. – grettke

Répondre

4

Je ne pense pas que ce soit considéré comme un meilleur style, le premier est redondant. La vraie question est de savoir si vous définissez la fonction nommée foo ou simplement d'utiliser lambda à la place. Si vous avez déjà décidé de créer une fonction nommée foo alors je ne vois pas pourquoi vous mettriez le lambda à l'intérieur. lambda vous évite d'avoir à nommer et à définir séparément chaque petite fonction que vous effectuez, c'est donc là que réside la décision: cette fonction est-elle suffisamment importante pour être définie et nommée séparément?

0

Qu'est-ce que vous montrez est équivalent dans Javascript:

var foo = function(x) {42;} 

vs

function foo(x) { 
    42; 
} 

Ce dernier est le sucre syntaxique de l'ancien. Le premier style est la forme générale, ce dernier est un raccourci pour définir les fonctions.

Quant au style, je ne sais pas pourquoi le premier serait préféré. C'est plus long et nécessite plus d'imbrication.

0

Si le style est un autre mot de préférence alors je suis d'accord que le premier est un meilleur style. Il dit, sans détour, "foo est une fonction de x". Difficile de se tromper là-bas. L'argument pour le style "defun" dans votre second exemple est que vous le définissez comme vous l'appelez. Il est l'équivalent de lisp où vous mettez le * lors de la déclaration d'une variable de pointeur en C. Ne veut rien dire: choisissez ce que vous voulez, ou ce que le groupe que vous travaillez a déjà décidé. Personne ne vous comprendra mal.

0

C'est parce que

(define (foo x) 
    42) 

ajouter une forme particulière à la langue.

1.

(define foo 45) 

est une forme spéciale

2.

(lambda (x) (+ x 1) 

Est-ce une autre forme spéciale si:

(define foo (lambda (x) (+ x 1))) 

Ajouté aucune autre forme particulière que les 2 ci-dessus.

L'ajout d'un raccourci pour définir une fonction est donc un sucre syntaxique. Comme le schéma tend à être minimaliste, il n'est pas nécessaire que le langage ajoute une forme plus spéciale que nécessaire.Maintenant, je pense que:

(define foo (x) (+ x 1)) 

est lisible et il ne coûte pas bouillie de maïs remeber et comprendre donc je ne me dérange pas de l'avoir dans le schéma.

Questions connexes