«Est ce que je dis une betise si je compare ca aux templates du C++ ?»
Je connais très mal le C++, mais si je ne me trompe pas c'est associable aux functors que l'on trouve dans la STL (ou aux agents dans eiffel, ou à des pointeurs de fonction en C, ou aux blocs en ruby).
Les templates servent surtout à abstraire les types de données, alors que là c'est le code qu'on abstrait, comme lorsque l'on définit un callback en C. La différence par rapport au C est dans la facilité de combiner les fonctions pour en former de nouvelles. Ça se fait au vol en lisp alors qu'en C il faudrait définir la fonction explicitement.
«le coup de la fonction map me plait bien aussi»
On trouve ce genre de fonctions aussi dans la plupart des langages, dont C++ ou Ruby, donc au pire si tu n'es pas convaincu par le fonctionnel il te reste un espoir ;) Et comme je suis fan de ruby, je ne peux pas m'emêcher:
[1, 3, 12].map { |i| i*2 }
=> [2, 6, 24]
[1, 3, 12, 4].find { |i| i > 2 and i < 6 }
=> 3
> [1, 3, 12, 4].find_all { |i| i > 2 and i < 6 }
=> [3, 4]
[1, 3, 12, 4].collect { |i| i > 2 and i < 6 }
=> [false, true, false, true]
Ruby est un langage objet, mais ses blocs viennent directement de la programmation fonctionnelle: ici la méthode map appelle le bloc pour chaque élément, et le |i| nomme "i" le premier paramètre de la fonction. Les fonctions à deux paramètres donnent:
[ 1, 3, 12, 4 ].sort { |a, b|
b <=> a
}
=> [12, 4, 3, 1]
[^] # Re: un environnement
Posté par Yusei (Mastodon) . En réponse au journal Lisp: pourquoi est-ce different ?. Évalué à 4.
Je connais très mal le C++, mais si je ne me trompe pas c'est associable aux functors que l'on trouve dans la STL (ou aux agents dans eiffel, ou à des pointeurs de fonction en C, ou aux blocs en ruby).
Les templates servent surtout à abstraire les types de données, alors que là c'est le code qu'on abstrait, comme lorsque l'on définit un callback en C. La différence par rapport au C est dans la facilité de combiner les fonctions pour en former de nouvelles. Ça se fait au vol en lisp alors qu'en C il faudrait définir la fonction explicitement.
«le coup de la fonction map me plait bien aussi»
On trouve ce genre de fonctions aussi dans la plupart des langages, dont C++ ou Ruby, donc au pire si tu n'es pas convaincu par le fonctionnel il te reste un espoir ;) Et comme je suis fan de ruby, je ne peux pas m'emêcher:
[1, 3, 12].map { |i| i*2 }
=> [2, 6, 24]
[1, 3, 12, 4].find { |i| i > 2 and i < 6 }
=> 3
> [1, 3, 12, 4].find_all { |i| i > 2 and i < 6 }
=> [3, 4]
[1, 3, 12, 4].collect { |i| i > 2 and i < 6 }
=> [false, true, false, true]
Ruby est un langage objet, mais ses blocs viennent directement de la programmation fonctionnelle: ici la méthode map appelle le bloc pour chaque élément, et le |i| nomme "i" le premier paramètre de la fonction. Les fonctions à deux paramètres donnent:
[ 1, 3, 12, 4 ].sort { |a, b|
b <=> a
}
=> [12, 4, 3, 1]