【发布时间】:2016-10-03 02:27:55
【问题描述】:
我正在学习与这种条件混淆的haskell中的递归函数:
我在这里有一个元组列表:
[(0.5,'!'),(1,'*'),(1.5,'#')]
我想要做的是输入一个数字 n 并与列表的每个元组中的第一个数字进行比较
所以假设n=0.1,当比较0.5发现小于0.5时,返回char '!'
假设n=0.7,即>0.5,继续比较,发现
比较整个列表后发现 d 仍然比最后一个大,它只会返回 char 'n'
我已经在这种情况下工作了很多时间,但仍然无法做到这一点,这是我的代码:
find :: Double -> [(Double,Char)] -> Char
find d [] = ' '
find d xs
| d <= Double(xs[0]) = xs[0]
| d > Double(xs[0]) = find d tail(xs)
请使用递归!
【问题讨论】:
-
我不认为
tail(xs)做你认为它做的事情。 -
@immibis 正如我所料,它应该返回没有第一个元组的列表,所以你的意思是这在有元组的列表中不起作用?这段代码中的尾巴是什么?
-
如果我没记错的话,
tail(xs)与tail (xs)相同,因此在此上下文中,find d tail(xs)与find d tail xs相同,后者将“三个参数”传递给find. -
您可能不能/不想更改练习要求,但请注意,在 Haskell 中返回
'n'作为“未找到”的错误值是非常不习惯的。这是因为如果我们返回'n',我们不知道它是否被找到,它是'n'还是没有找到。更标准的方法是返回Maybe Char而不是普通的Char。 -
@chi maybr char 是什么意思?