【问题标题】:haskell: recursive function that return the char in a tuple list with certain condition(compare)haskell:递归函数,返回具有特定条件的元组列表中的字符(比较)
【发布时间】: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 是什么意思?

标签: python haskell


【解决方案1】:

tuple 与 Haskell 中的数组不同

find :: Double -> [(Double,Char)] -> Char
find d [] = ' '
find d (x:xs)
    | d <= fst x = snd x
    | otherwise = find d xs

【讨论】:

  • 我试了一下,还是说“Parse error in pattern:”
  • 很抱歉我错过了()
  • 那行得通,你有像网站这样的资源,可以在 list+tuple 上提供更多示例吗?
  • List 和 tuple 是 Haskell 中最常用的数据结构,有很多很棒的资源可以参考:learnyouahaskell.com/starting-out
  • 而且 list 也与 array 非常非常不同。
猜你喜欢
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 2018-02-20
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
相关资源
最近更新 更多