|
Publicité ' | ||||||||||||||||||||||||
|
|
#41 | |||
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 99 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#42 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Code :
|
||
|
|
00
|
|
|
#43 |
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 99 ![]() |
Ben oui on est d'accord. On peut tout faire en C ou assembleur (encore heureux) mais cela ne fait pas partie du langage de base. car sinon dans ce cas tous les langages deviennent fonctionnel (sauf java
Par exemple dans ton cas, tu ne peux pas utiliser tes fonctions comme des fonctions standards du C (c'est à dire un pointeur de fonction). En gros tu viens de montrer pourquoi le C n'est pas un langage fonctionnel. Qu'on puisse l'émuler, c'est l'évidence, on peut faire ce que tu as fait dans n'importe quel langage Turing puissant. Je vous le dis à la fin on va tous tomber d'accord sur ce qu'est un langage fonctionnel (on est pas d'accord sur la définition mais on est toujours d'accord sur la liste des langages qui le sont, je vous jure j'ai eu cette discussion je ne sais combien de fois). |
|
|
00
|
|
|
#44 | |
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Ça ne marche pas, de base. Mais on peut contourner la limitation. Ce que je ne comprends pas, c'est pourquoi tu persistes à accorder tant d'importance à l'application partielle. Utiliser comme critère "avoir des fonctions de première classe" (merci Ubiquité de m'avoir repris) porte beaucoup moins à discussion, je crois. |
|
|
|
00
|
|
|
#45 | |||
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 99 ![]() |
Citation:
Code :
Le C ne considère pas que les fonctions sont des citoyens de première classe , pourtant il m'a toujours donné cette impression ? Pourquoi je m'acharne, car quand vous allez répondre à cette question (là sur le C) vous allez me dire << non car je peux pas écrire ça >> et là je vais répondre, << tiens tu parles exactement de l'application partielle >>. J'essaye pas de vous convaincre que ma définition est la bonne, j'essaye juste de vous montrer que l'on a tous la même mais que personne ne s'exprime bien (spécialement moi, je sais). |
|||
|
|
00
|
|
|
#46 | ||
|
Membre chevronné
![]() Inscription : mars 2010 Messages : 281 ![]() |
Non mais à partir du moment où tu as des fermetures (c'est à dire des fonctions locales capturant leur environnement) tu as l'application partielle, au pire par eta expansion (ce que tu viens de faire en lisp), mais plus simplement par définition de fonction retournant une fonction. C'est juste un effet secondaire du reste. Ce qui est important c'est la capture
Pour reprendre encore une fois l'exemple classique, quand en caml, tu écris C'est comme si tu écrivais Code :
|
||
|
|
00
|
|
|
#47 | |
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 99 ![]() |
Citation:
Le problème vient du fait qu'il n'y a pas de définition précise de ce qu'est une application partielle. Et pour avoir aborder ce sujet la seule définition précise que l'on m'a un jour sortie ne s'appliquait à aucun langage existant. |
|
|
|
01
|
|
|
#48 | ||
![]() ![]() Inscription : juin 2002 Messages : 2 033 ![]() |
A quoi fais-tu allusion ? Je ne me souviens pas avoir prétendu quoique ce soit sur les capacités (ou incapacités) de l'assembleur.
Citation:
Citation:
La capture de l'environnement ne se limite pas à pouvoir faire de "l'application partielle". |
||
|
|
00
|
|
|
#49 | ||||||
![]() ![]() Inscription : juin 2002 Messages : 2 033 ![]() |
Citation:
Parce que ça c'est équivalent en C à : Code :
Je ne veux pas dire par là que Lisp n'est pas fonctionnel (ni que le C l'est) ni que les fermetures, les fonctions d'ordre supérieur ou autre chose n'existe pas. Seulement que l'exemple ne montre rien de ceci. Ce qui se rapprocherait le plus de ce que tu cherches à faire est probablement quelque chose du style de (n'ayant pas fait de Lisp depuis très très longtemps, je ne suis pas 100% certain de la syntaxe) : |
||||||
|
|
00
|
|
|
#50 | |||||
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 99 ![]() |
Citation:
Code :
|
|||||
|
|
00
|
|
|
#51 | |||
![]() ![]() Inscription : juin 2002 Messages : 2 033 ![]() |
Citation:
Je ne faisait que remarquer que ton exemple en Lisp, dont le but était visiblement de réfuter la remarque de LLB, ne correspondait en rien à la problèmatique en cours et surtout pas à de "l'application partielle" (ou a quelques autres particularités des langages fonctionnels que ce soit). |
|||
|
|
00
|
|
|
#52 | ||
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 99 ![]() |
Je vais faire du multiréponse.
Citation:
Citation:
Quand j'ai fait de l'assembleur (j'avais déjà fait du C) je me suis rendu compte que c'était exactement la même chose que le C avec la gestion des registres en plus. Les programmes sont structurés pareil. Le C a été directement pensé depuis l'assembleur pour être une micro couche et cacher les registres (rendre l'assembleur portable). C'est pour ça que toutes ce que le C sait faire vient de l'assembleur. Avant de dire non, écris moi un exemple de code C qui soit vraiment autre chose que ce que l'assembleur sait faire. P.S : J'en ai marre de ce dialogue de sourds ou chacun parle sans comprendre l'autre. Ça ne mène franchement à rien. Mais je répondrai jusqu'au bout malheureusement, j'en suis désolé, je ne peux pas laisser qqn dire que je me trompe quand ce n'est pas le cas. Désolé. |
||
|
|
01
|
|
|
#53 |
|
Membre éprouvé
![]() |
Si on parle d'un assembleur du 21eme siecle, c'est à dire RISC comme par exemple l'ia-64, je te garantie qu'un programmeur C avec un compilateur basic fera mieux que toi, n'importe comment.
De plus, ca serai pas mal que t'acquiére un minimum un terminologie correcte avant de vouloir débattre, histoire que le reste du monde comprenne ce que tu écris. |
|
|
00
|
|
|
#54 | |
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 99 ![]() |
Citation:
Après oui je vois bien que les gens ne comprennent pas ce que je dis. Je parlais de l'asm du 386, pas d'un autre assembleur (je ne pensais pas que c'était nécessaire de le préciser). |
|
|
|
00
|
|
|
#55 | |||||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Si tu veux dire que le C peut être traduit en assembleur, ok, on le savait. Si tu veux dire que le C est plus bas-niveau, plus proche de l'assembleur, que la plupart des langages, ok, on le savait. Citation:
Si tu considères que f est une fonction à un argument qui renvoie une fonction, alors ça marche en Lisp. Ça marche aussi en C : Code :
Citation:
|
|||||
|
|
00
|
|
|
#56 | ||||
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 99 ![]() |
Citation:
Citation:
En LISP je te construis en me marrant une fonction avec l'un des deux arguments << capturé >> comme vous dites (je te le fais en haskell n'ayant plus fait de lisp depuis longtemps, mais cela se traduit aisément). Code :
|
||||
|
|
00
|
|
|
#57 | |
![]() ![]() Inscription : juin 2002 Messages : 2 033 ![]() |
Citation:
Même si effectivement je pense que C n'est pas qu'une micro couche au dessus de l'assembleur (je renvoie au message de LLB pour plus d'info là dessus), je ne vois pas où j'ai parlé de ce point ici (à part le présent message bien entendu). |
|
|
|
00
|
|
|
#58 | ||
![]() ![]() Inscription : juin 2002 Messages : 2 033 ![]() |
Citation:
Personne ne prétends le contraire et un exemple a été donné précédemment. Par contre il n'y a pas en Lisp le sucre syntaxique ni de mécanisme particulier permettant d'appeler avec un argument une fonction qui en attends deux et l'utilisation d'une fonction développé pour renvoyer la fermeture qui va bien ne peut pas être appelée avec les deux arguments en utilisant la syntaxe traditionnel des appels à n arguments. Citation:
|
||
|
|
00
|
|
|
#59 |
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 99 ![]() |
Je serais d'accord s'il y avait une terminologie usuelle, clairement définie, sans mot en triple voir en quadruple. Pour l'instant l'informatique est jeune, fougueuse et en terme de vocabulaire personne n'est d'accord. Et dans notre cas on était exactement dans un débat terminologique (pardonnez moi ce mot) sur savoir quel sens donné au mot fonctionnel. Presque aucun mot aujourd'hui n'a de définition précise qui survit à un examen en profondeur. Tant que l'on aura pas fixé une terminologie on verra ce genre de débats ad vitam eternam.
|
|
|
00
|
|
|
#60 |
|
Membre Expert
![]() Inscription : avril 2007 Messages : 829 ![]() |
Correction : les mots que tu emploies ("langage fonctionnel", "application partielle", "géré par l'assembleur") sont vides de sens. Les mots utilisés par la plupart des autres intervenants ("curryfication", "fermeture/closure", "environnement", "sucre syntaxique", "fonctions de première classe") ont un sens précis qui fait consensus.
Bon, d'accord, peut-être pas "sucre syntaxique" (transformation que l'on peut exprimer comme une simple substitution locale ?). |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com