p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Rédacteur/Modérateur
    Avatar de Trap D
    Inscrit en
    septembre 2003
    Messages
    4 657
    Détails du profil
    Informations forums :
    Inscription : septembre 2003
    Messages : 4 657
    Points : 5 911
    Points
    5 911

    Par défaut Question sur la curryfication

    Bonjour

    Une question "théorique" me tracasse depuis quelque temps :
    Imaginons le prédicat Prolog suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    extract(Liste1, Liste2, Element, Value) :-
      nth0(Ind, Liste1, Element),
      nth0(Ind, Liste2, Value).
    Ce prédicat recherche l'index de Element dans Liste1 et va ensuite rechercher la valeur correspondant à cet Index dans Liste2.

    Venons-en maintenant à ma question : si j'utilise ce prédicat dans un maplist qui est un prédicat Prolog qui permet d'appliquer une régle sur une liste afin éventuellement d'obtenir une liste résultat (un peu comme le map du Lisp), par exemple :

    maplist(extract(Ensemble1, Ensemble2), ListeElements, ListeResultats)

    peut-on parler de "curryfication" ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : Intérieur avec jeune femme de Vilhelm Hammershoi

  2. #2
    Rédacteur
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    juin 2007
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : juin 2007
    Messages : 1 617
    Points : 2 773
    Points
    2 773

    Par défaut

    Ce que ton exemple démontre c'est que :
    • statiquement ton langage possède la notion d'application partielle d'une clause
    • dynamiquement ton langage possède une notion de fermeture (une clause liée avec un environnement)


    Tu n'as pas besoin de curryfication si tu possède déjà ces deux caractéristiques, la curryfication c'est la même chose avec en plus des types fonctionnels.

    Tu n'en as pas besoin mais si ça t'intéresse quand même :
    • selon moi la notion de curryfication c'est la présence d'une transformation naturelle (un morphisme de foncteur vers foncteur) de type (A × B → C) → (A → B → C)
    • le plus convaincant ce serait d'exhiber un tel type à l'aide d'un dialecte Prolog typé (par exemple alpha-Prolog)
    • d'une façon équivalente, si l'application était associative à gauche alors on pourrait dire que les clauses Prolog sont currifiées
    • c'est une fausse piste d'argumenter sur le nombre de paramètres pour affirmer que l'on possède la curryfication, le nombre de paramètres est une notion largement illusoire comme le montre l'exemple ci-dessous où l'on applique 4 arguments à la fonction identité

    Code Caml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let id x = x 
    in  id id (+) 1 2;;
    Du même auteur: le cours OCaml, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Inscrit en
    septembre 2003
    Messages
    4 657
    Détails du profil
    Informations forums :
    Inscription : septembre 2003
    Messages : 4 657
    Points : 5 911
    Points
    5 911

    Par défaut

    Merci de ton explication. J'y vois un peu plus clair.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : Intérieur avec jeune femme de Vilhelm Hammershoi

  4. #4
    Rédacteur
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    juin 2007
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : juin 2007
    Messages : 1 617
    Points : 2 773
    Points
    2 773

    Par défaut

    La curryfication est aussi une notion de logique, pas seulement une notion de programmation.
    Il y a une correspondance entre les types fonctionnels et les propositions logiques.
    Le type (A × B → C) → (A → B → C) correspond à la proposition (A & B ⇒ C) ⇒ (A ⇒ B ⇒ C).

    Cette proposition donne une sémantique pour la conjonction, qui est celle utilisée lors de la démonstration.
    En effet, pour prouver que (A & B) ⇒ C est vrai :
    • on suppose que A est vrai
    • sous la condition que A est vrai on prouve que B ⇒ C
    • tout cela revient à prouver que A ⇒ (B ⇒ C)


    Derrière le nom barbare il y a une proposition qui ne fait que formaliser une pratique courante de la démonstration.
    Du même auteur: le cours OCaml, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  5. #5
    Membre Expert
    Inscrit en
    avril 2007
    Messages
    831
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 831
    Points : 1 130
    Points
    1 130

    Par défaut

    Remarque : pour une vision de plus haut niveau de la curryfication, au delà du traitement logique on peut la représenter dans un cadre catégorique, comme l'adjonction entre (* A) et (A =>), qui permet de passer de (X * A -> Y) à (X -> (A => Y)).
    Ce n'est certainement pas le seul point de vue possible, mais il apporte un large spectre d'applications (à toutes les interprétations catégoriques des langages de programmation, par exemple).

Discussions similaires

  1. [debutant] Questions sur 1 futur projet
    Par cyrull22 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 28/04/2003, 21h49
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo