C'est moins spécialisé mais j'avais essayé, pour un petit interprète de bytecode, d'utiliser un Map.Make(Int) comme environnement, et malgré la meilleure complexité théorique c'était sensiblement...
Type: Messages; Utilisateur: gasche
C'est moins spécialisé mais j'avais essayé, pour un petit interprète de bytecode, d'utiliser un Map.Make(Int) comme environnement, et malgré la meilleure complexité théorique c'était sensiblement...
Un petit code d'exemple pour montrer comment faire un "make_matrix" généralisé en dimension arbitraire à la sauce "functional unparsing" (Olivier Danvy).
let make_matrix x y f =
Array.init x...
Tu pourrais t'inspirer des fonctions suivantes (qui me semble être comme rectangle, mais sans bornes) :
let elements_x, elements_y =
let rec elements
: 'a 'b . ('a -> 'b -> 'c) -> ('b...
SpiceGuid > on parle de toi sur StackOverflow ! :-'
J'ai mis en ligne une version un peu nettoyée de ton code :
http://hpaste.org/45805/bimap_as_a_nonregular_recursi
J'ai retiré les...
C'est une structure diabolique. C'est dingue ce qu'on peut faire avec les types non-réguliers.
Pour ton problème de typage, c'est lié à l'inférence des fonctions récursives. Il faut forcer la...
Comme le précise le commentaire, on considère comme réels les séquences *infinies* de booléens. C'est ce que fait la fonction "randoms" (que personne n'est censée connaître et que d'ailleurs j'avais...
import Data.List (mapAccumL, sortBy)
import System.Random (RandomGen, split, randoms)
import Data.Ord (Ordering)
import Data.Function (on)
-- compare two real numbers as infinite sequences of...
Disclaimer : aucun des codes de ce post n'a été testé (ni même compilé).
Au passage, je suis allé voir et j'ai le sentiment que ton fold sur les arbres n-aires n'est pas "le fold canonique". Tu...
Bon, c'est mort. On regarde un code, on voit un truc à améliorer, on essaie. Puis un autre. Puis un autre. Puis après ça ressemble plus du tout, et on a perdu la trace de l'ordre des modifications....
J'ai l'impression que le code actuel de l'opération set est faux :
let set v i x =
let rec grow i = Node (*[...]*)
and tree i node =
match node with
| Leaf ->
...
- "or" c'est moche (parce que "and" ne marche pas, et les priorités sont louches), "||" for the win.
- (..+1) (...-1), en fait il n'y a qu'un index qui varie (l' "éloignement par rapport aux...
Pourrais-tu expliciter ce qui ne marche pas ? Ça a sûrement à voir avec la conservation du polymorphisme, mais de loin ce n'est pas évident de voir le problème.
En tout cas, à l'utilisation ils...
Si, il est utilisé par get et set, en tant qu'argument initial à leur fonction "helper' (puique c'est le node courant).
Mais l'introspection ne résout pas le problème de savoir si les méthodes sont bien les mêmes sur les deux objets, si ?
Sauf que les fonctions de comparaison ne remplacent pas sup et inf.
Par exemple, dans le cas d'un type produit, tu as sup (2, 5) (3, 4) = (3, 5).
Comment tu fais ça avec tes fonctions de...
Ça n'a rien d'un hack. Tu représentes ton type comme 'a + 'a, et moi comme 2 * 'a.
En plus, ma version est mieux. Dans ton cas tu dupliques de l'information (tu précises deux fois que le contenu...
Euh, tu as probablement lu l'intégralité de la discussion qui me concerne en tout cas, puisque je n'ai posté que deux messages sur ce thread.
type 'a bound = { value : 'a; eq : 'a bound -> bool;...
Où est-ce que tu risques l'invalid_argument ?
Sinon, il reste un problème avec le code tel quel, c'est qu'il est possible de mélanger dans un intervalle des bornes avec des fonctions de...
J'ai amélioré le code pour mettre l'accent sur la modularité plutôt que sur les types inductifs.
On commence avec un code modulaire simple, semblable au code de gorgonite (mais en moins laid) :
...
Voici une ré-écriture du code de dérivation en utilisant des facilités syntaxiques. Je n'ai (théoriquement) absolument rien changé au comportement du code.
let (+) a b = Add(a,b)
and ( ^ ) a b...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.