【发布时间】:2014-11-23 15:04:13
【问题描述】:
这是我尝试编写一个函数,将偶数长度的列表分成相等的两半。
halve :: [a] -> ([a], [a])
halve x
| even len = (take half x, drop half x)
| otherwise = error "Cannnot halve a list of odd length"
where
len = length x
half = len / 2
我收到以下错误:
No instance for (Fractional Int) arising from a use of ‘/’
In the expression: len / 2
In an equation for ‘half’: half = len / 2
In an equation for ‘halve’:
我不明白这个错误,但我怀疑 Haskell 需要提前被告知 len 是你可以除以 2 的东西。那么,我该如何纠正这个例子?我的代码在惯用的haskell附近吗?如果有其他关于我的代码的 cmets,我将不胜感激。
【问题讨论】:
-
halve a = go a [] a; go [] b c = (reverse b, c); go a b (c:d) = go (drop 2 a) (c:b) d是 Lisp 民间传说中的一个著名技巧。