【发布时间】:2011-12-10 21:41:23
【问题描述】:
如果你有一个函数“test a b”,如果 a 和 b 直接连接,并且如果你有一个给定的无序列表,那么从给定列表中过滤所有连接的东西的优雅和快速的解决方案是什么?
例子:
let test a b = let diff = a - b in diff == 0 ;;
let lst = [4;1;7;3;8;9;2;0] ;;
filter_connected 2 lst ;;
-> [4;1;3;2;0]
有什么提示吗?
嗯,我会尝试完善我的问题...
- 存在一个未排序的事物列表,pE。 “让 lst = [a;b;c;d;e;f;g;h];;”带类型 val a' 列表
- 还有一个函数可以决定两个事物是否可以直接连接,或者换句话说,如果两个事物是直接邻居: val 测试:a' -> a' -> bool
- 我需要的是一个具有三个参数的函数,第一个是特定的东西,第二个是上面建议的未排序的东西列表,最后一个是上面描述的测试函数: val filter_connected : a' -> a' list -> (a' -> a' -> bool) -> a' list
如果 a b 是直接邻居且 b c 是直接邻居,则 [a;b;c] 是连接的。
建议的“List.filter () lst”在这里没有帮助,因为它只过滤定向邻居。
在上面的示例中,a b 和 b c 作为测试函数的直接邻居,而所有其他函数都不是,“filter_connected”调用将是:
"filter_connected b lst (test);"
并且会返回: [a;b;c]
希望它会更干净......
【问题讨论】:
-
我很确定你的意思是
diff = 0,你写了diff == 0,只是因为它们在当前的实现中做同样的事情。但话又说回来,如果test是你所说的“连接”的一个例子,你为什么不把它传递给filter_connected更重要的是,连接性的定义不只是平等吗?它应该是怎样的?用来获取[4;1;3;2;0]? -
粘贴您的代码,并将其格式化以获得更好的答案(如果有比 Pascal 更好的答案)
标签: list filter components ocaml