haskell - Haskell:等效的数组循环比较
问题描述
我正在尝试比较两个链表的某些方面。
数组都具有格式(假设 a...p 派生 Eq):
linkedList1 = [(a, b, c, d), (e, f, g, h)]
linkedList2 = [(a, f, k, l), (a, b, g, m)]
我希望在这里完成如下:
我想输入一个索引,以便在每个四元组中引用。
对于该索引,我想知道,对于linkedList 1 中的每个四元组,该索引处的值与linkedList 2 中每个四元组中相同索引处的值相同的次数。
例如在上面的链表上,输入两个链表和索引 1 将返回值 2 作为linkedList1 的第一个四元组中的第二个值=linkedList2 的第二个四元组中的第二个值。
然而,输入两个链表和索引 3 将返回 0,因为第一个链表的四元组中的第 4 个字母都不匹配第二个链表的四元组中的任何第 4 个字母。
任何建议如何实现这一目标/开始?我一直在尝试实现递归映射函数,但进展非常缓慢。
解决方案
这就是我想出的:
howManyEqualAtIndex l1 l2 0
=> 2
howManyEqualAtIndex l1 l2 1
=> 2
howManyEqualAtIndex l1 l2 2
=> 1
howManyEqualAtIndex l1 l2 3
=> 0
l1 = [('a', 'b', 'c', 'd'), ('e', 'f', 'g', 'h')]
l2 = [('a', 'f', 'k', 'l'), ('a', 'b', 'g', 'm')]
--List comprehension checking all combinations.
--Predicate that they are equal
howManyEqualAtIndex xs ys idx = length [() | x<-xs, y<-ys, equalAt x y idx]
--Hardcoded for quads, can be extended to other n-tuples,
--or changed to list version commented out below
equalAt (a,_,_,_) (b,_,_,_) 0 = a == b
equalAt (_,a,_,_) (_,b,_,_) 1 = a == b
equalAt (_,_,a,_) (_,_,b,_) 2 = a == b
equalAt (_,_,_,a) (_,_,_,b) 3 = a == b
--equalAt :: (Eq a) => [a] -> [a] -> Int -> Bool
--equalAt xs ys idx = xs !! idx == ys !! idx
推荐阅读
- pandas - Pandas时差计算错误
- r - 处理 R 中缺少数据的行;格默
- c++ - 使用返回不完整类型的函数作为默认参数
- perl - 在 perl 中为字符串创建通用正则表达式
- c# - 如何消除这些函数中的冗余代码?
- oracle - 如何在返回选择游标的存储过程中调用其他数据库函数
- macos - 打开控制台应用程序以显示统一日志记录日志
- python - 如何使用 Python 3.7 和 Anaconda 运行 Spyder
- python - OpenCv 和 TensorFlow AttributeError:模块“cv2.dnn”没有属性“readNetFromTensorFlow”
- php - 警告:MyCompany\CmsBundle\Controller\DocumentDuplicateController::__construct 缺少参数 1