繁体   English   中英

为什么我的 Guard 不想在 Haskell 中调用递归函数

[英]Why my Guard doesn't want to call a recursive function in Haskell

我试图在我的 Haskell 程序中调用递归。 每次列表中的元素与单词匹配时,我都想调用我的函数。

我的代码编译没有问题,但是当我试图执行他时,我有这个错误

haskell: haskell.hs:(27,1)-(30,33): Non-exhaustive patterns in function detect

我的问题所在的功能:

detect :: [[Char]] -> [[Char]] -> [[Char]]
detect (x:xs) b
         | x == "now" || x == "go" = detect xs (SwapP 0 1 b)
         | x == "stop" = detect xs (SwapP 0 (length b - 1) b)
detect (x:xs) b = detect xs b

在 x:xs 中有我的单词列表,在我的 b 中,我有一个函数,它的工作是改变单词的位置。

但是守卫中的递归不起作用。

我的问题中最奇怪的事情是当我尝试做同样的事情但在我的警卫之外,它正在工作,如果我正在做

  detect :: [[Char]] -> [[Char]] -> [[Char]]
   detect (x:xs) b = detect xs (SwapP 0 (length b - 1) b)

它正在起作用,我的第一句话和最后一句话正在改变。

所以如果有人知道这个问题,你可以留言。 谢谢。

基本上,我的问题是我的xs列表。 我正在递归地阅读所有列表并删除元素。 最后,我的列表没有元素,但我的函数仍在尝试删除和检查内容。 所以,为了解决这个问题,我只是添加了一个简单的

compares [] b = b

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM