Je vais sur cette conférence haskell sur count down game, je ne connais pas de haskell mais je suis intrested dans le problème, j'essaie de porter son code à clojure.Haskell à Clojure
c'est la partie que je suis coincé doit être quelque chose que je ne comprends pas haskell,
split :: [a] -> [([a],[a])]
split [] = [([],[])]
split (x:xs) = ([],x:xs) : [(x:ls,rs) | (ls,rs) [([a],[a])]
nesplit = filter ne . split
ne :: ([a],[b]) -> Bool
ne (xs,ys) = not (null xs || null ys)
exprs :: [Int] -> [Expr]
exprs [] = []
exprs [n] = [Val n]
exprs ns = [e | (ls,rs)
J'ai moi-même divisé donné 1 2 3 4 il recrache,
(((1) (2 3 4)) ((1 2) (3 4)) ((1 2 3) (4)))
(defn split [v]
(if (= (count v) 1)
(list (first v))
(map #(list (take % v) (drop % v)) (range 1 (count v)))))
(defn exprs [v]
(if (= (count v) 1)
v
(map #(concat (exprs (first %)) (exprs (second %))) v)))
(exprs (split [1 2 3 4]))
qui me donne,
java.lang.IllegalArgumentException: Don't know how to create ISeq from: java.lang.Integer
Est-ce qu'un nyone dites-moi ce qui me manque dans le code haskell? Son code complet est disponible here.
La dernière ligne de votre code Haskell manque-t-elle un carré de fermeture support? –
J'ai jeté un coup d'oeil au même problème ici, bien que plus de force brute que la solution élégante de Graham Hutton. Voir http://www.fatvat.co.uk/2009/02/countdown.html –
merci beaucoup jeff, j'essayais la méthode brute force de toute façon. –