Au début, cela ne semblait pas intuitif, mais maintenant je pense que c'est merveilleux, et j'ai surtout fait de la lecture. C'est en fait ainsi que nous parlons: "La somme de ..., le produit de ..." Cependant, cela nécessite une lecture différente. Maintenant, vous appliquez simplement l'opérateur à tous les arguments, au lieu de les lire sur une ligne.
Mark C
Quel est le problème avec la notation de préfixe? Presque toutes les langues l'utilisent. Les appels de fonction sont presque toujours préfixés.
SK-logic
Pas vraiment; "intuitif" est intuitif parce que vous l'avez appris sous forme de conventions mathématiques pendant plus de 20 ans. Étant donné que seul LISP et peut-être quelques autres langues utilisent cette convention, et que vous apprendrez encore beaucoup plus l'autre, elle ne deviendra presque jamais aussi "intuitive". Et nous ne parlons ici que d'expressions simples (2 + 3 ... comment aimeriez-vous essayer un liner "demi-page"? :)
Rook
Réponses:
6
Le lire mentalement de gauche à droite comme langue parlée avec les bons verbes peut aider. Par exemple (+ 3 2) pourrait être "ajouter trois et deux". Dans le cas plus général, vous pouvez dire "effectuer $ opération sur $ opérandes". Appliqué au même cas: "Effectuez l'opération d'ajout sur trois et deux".
Vous utiliseriez des questions rhétoriques. :) Égal? (Quoi?), "1 et 2! (Euh ... Non ...)
Arafangion
@RiceFlour (Hé, j'ai grandi en mangeant des choses à base de farine de riz - j'ai un problème de gluten.) Je lirais "Est-ce qu'un est égal à deux?", Ou "Les éléments suivants sont-ils égaux?" Les opérateurs supérieur à et inférieur à ne sont pas si naturels sous forme de préfixe, mais je me demande à quelle fréquence ils sont utilisés dans le code Lisp.
Mark C
7
Des trucs? Pourquoi?
Cela ne vous semble pas encore intuitif, car votre analyseur mental n'y est pas habitué. Cela deviendra meilleur si vous l'utilisez et le lisez encore et encore.
Je n'ai même pas lu que beaucoup, mais maintenant je pense qu'il est merveilleux. Il semble que mon cerveau commence à avoir un sens presque "tactile" des parenthèses. Je pense que le sentiment ne fera que devenir plus vif.
Mark C
5
Vous pourriez y voir une sorte d'appel de fonction:
(operator operand1 operand2 ...)
Il n'y a rien de très spécial à ce sujet. Si vous surchargez des opérateurs en C ++ (et de nombreux autres langages qui le permettent), vous devez souvent définir ce type de fonction exactement de cette façon:
Oui, c'est comme ça que je le fais. Si vous reculez et regardez les appels de méthode en Java, C #, etc., ils ne sont en fait que des préfixes avec les parenthèses dans un endroit légèrement différent: MyMethod (arg1, arg2).
nlawalker
4
De nombreuses langues utilisent un mélange de préfixe, d'infixe et même de postfixe.
Lisp utilise uniquement le préfixe - par défaut. Si sin (x) est intuitif par rapport aux mathématiques, alors (sin x) n'est pas loin. Si se déplacer (chien, maison) est un appel de procédure traditionnel, alors à Lisp c'est juste (déplacer le chien à la maison).
Lisp ne fait aucune exception pour les mathématiques et traite +, -, * et d'autres comme les appels de fonction ordinaires.
Lorsque (finalement) "Tout est un appel de fonction" (ou une forme spéciale, ou une macro-expansion, les deux ayant la syntaxe de surface de "l'appel de fonction") cliqué, cela semblait assez naturel.
Donc, car (= 1 2)je lis cela comme «appelez la comparaison numérique égale sur 1 et 2».
Réponses:
Le lire mentalement de gauche à droite comme langue parlée avec les bons verbes peut aider. Par exemple (+ 3 2) pourrait être "ajouter trois et deux". Dans le cas plus général, vous pouvez dire "effectuer $ opération sur $ opérandes". Appliqué au même cas: "Effectuez l'opération d'ajout sur trois et deux".
la source
( = 1 2 )
et( > 4 2 )
Des trucs? Pourquoi?
Cela ne vous semble pas encore intuitif, car votre analyseur mental n'y est pas habitué. Cela deviendra meilleur si vous l'utilisez et le lisez encore et encore.
la source
Vous pourriez y voir une sorte d'appel de fonction:
Il n'y a rien de très spécial à ce sujet. Si vous surchargez des opérateurs en C ++ (et de nombreux autres langages qui le permettent), vous devez souvent définir ce type de fonction exactement de cette façon:
la source
De nombreuses langues utilisent un mélange de préfixe, d'infixe et même de postfixe.
Lisp utilise uniquement le préfixe - par défaut. Si sin (x) est intuitif par rapport aux mathématiques, alors (sin x) n'est pas loin. Si se déplacer (chien, maison) est un appel de procédure traditionnel, alors à Lisp c'est juste (déplacer le chien à la maison).
Lisp ne fait aucune exception pour les mathématiques et traite +, -, * et d'autres comme les appels de fonction ordinaires.
la source
Lorsque (finalement) "Tout est un appel de fonction" (ou une forme spéciale, ou une macro-expansion, les deux ayant la syntaxe de surface de "l'appel de fonction") cliqué, cela semblait assez naturel.
Donc, car
(= 1 2)
je lis cela comme «appelez la comparaison numérique égale sur 1 et 2».la source