Haskell:列表中邻居号码之间的最小距离

cit*_*toz 1 haskell

我正在尝试定义一个functino,它找到列表中邻居号码之间的最小距离

这样的事情:

minNeighborsDistance [2,3,6,2,0,1,9,8] => 1
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样:

minNeighborsDistance [] = []
minNeighborsDistance (x:xs) = minimum[minNeighborsDistance xs ++ [subtract x (head xs)]]
Run Code Online (Sandbox Code Playgroud)

虽然这似乎运行,但一旦我输入列表,我收到一个异常错误.

我是Haskell的新手我会很感激这件事的任何帮助.

J. *_*son 6

如果你通过一个单独列表,minNeighborsDistance然后

  1. 那么它[]在第一行就不会匹配了
  2. 它会成功匹配(x:xs)分配单个值x和空类似xs,然后
  3. 当您尝试访问head空列表时,它会抛出一个错误.

此外,由于您以minNeighborsDistance递归方式调用,因此除了将空列表传递给它之外,最终总是在单个列表上调用它.