我正在学习这个Haskell讲座,它涉及倒数游戏,虽然我不懂Haskell,但我对这个问题很感兴趣,我正在尝试将他的代码移植到Clojure。
这是我卡住的部分,可能是我没有理解Haskell中的某些内容。
我有自己的分割方式,给定 1 2 3 4 后它会输出结果。
这段文本的意思是:
这是我卡住的部分,可能是我没有理解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)
我有自己的分割方式,给定 1 2 3 4 后它会输出结果。
(((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]))
这段文本的意思是:
这个错误信息是:java.lang.IllegalArgumentException: 不知道如何从 java.lang.Integer 创建 ISeq。
有人能告诉我在 Haskell 代码中我漏掉了什么吗?
他的完整代码清单可以在这里找到。