(这段代码没有多大意义,但我需要此逻辑才能在其他复杂函数中使用):
import Data.List
elemIndex1 xss@(x:xs) =
if (x == ' ')
then (elemIndex x xss)
else (elemIndex1 xs)
Run Code Online (Sandbox Code Playgroud)
所以我想这个功能给这个:
elemIndex1 "qwe asd zxc"
Just 3
Run Code Online (Sandbox Code Playgroud)
相反,它给出了以下内容:
elemIndex1 "qwe asd zxc"
Just 0
Run Code Online (Sandbox Code Playgroud)
据我了解,在else子句中,xss实际上变成了xs。所以我的问题是:是否有可能将变量(x:xs)绑定到常量并在任何迭代中使用该常量?
您似乎期望xss@(x:xs)达到以下条件:
xss:赋予elemIndex1 的原始字符串
x:任意调用的第一个字符xs:任意调用的其余字符例如,当您x首先匹配一个空格时
xss = "qwe asd zxc"
x = ' '
xs = "asd zxe"
Run Code Online (Sandbox Code Playgroud)
这不是模式匹配的工作方式。xss实际上等于x:xs,因此在该示例中为" asd zxc"。
如果要保留对函数的第一次调用,可以使用在原始函数范围内调用的帮助器函数。
xss = "qwe asd zxc"
x = ' '
xs = "asd zxe"
Run Code Online (Sandbox Code Playgroud)
请注意,str辅助函数主体中的I引用在其调用中将是一个常量。
就其价值而言,您所设计的示例似乎等同于,elemIndex ' '因为它通过返回来处理字符串中没有空格的情况Nothing。