Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Rédacteur/Modérateur
    Avatar de Trap D
    Inscrit en
    septembre 2003
    Messages
    4 519
    Détails du profil
    Informations forums :
    Inscription : septembre 2003
    Messages : 4 519
    Points : 5 410
    Points
    5 410

    Par défaut Question sur la curryfication

    Bonjour

    Une question "théorique" me tracasse depuis quelque temps :
    Imaginons le prédicat Prolog suivant
    Code :
    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 Damien Guichard
    Inscrit en
    juin 2007
    Messages
    1 569
    Détails du profil
    Informations personnelles :
    Nom : Homme Damien Guichard
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : juin 2007
    Messages : 1 569
    Points : 2 571
    Points
    2 571

    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 :
    1
    2
    3
    let id x = x 
    in  id id (+) 1 2;;
    Du même auteur: le cours OCaml, le dernier article publié, le projet, 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 519
    Détails du profil
    Informations forums :
    Inscription : septembre 2003
    Messages : 4 519
    Points : 5 410
    Points
    5 410

    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 Damien Guichard
    Inscrit en
    juin 2007
    Messages
    1 569
    Détails du profil
    Informations personnelles :
    Nom : Homme Damien Guichard
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : juin 2007
    Messages : 1 569
    Points : 2 571
    Points
    2 571

    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 projet, 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 009
    Points
    1 009

    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).

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •