我想知道是否可以使用predsort/3而不会丢失重复值?如果没有,我应该如何排序这个术语列表?
当前排序功能:
compareSecond(Delta, n(_, A, _), n(_, B, _)):-
compare(Delta, A, B).
Run Code Online (Sandbox Code Playgroud)
结果:
predsort(compareSecond, [n(3, 1, 5), n(0, 0, 0), n(8, 0, 9)], X).
X = [n(0, 0, 0), n(3, 1, 5)].
Run Code Online (Sandbox Code Playgroud)
你看,这个词n(8,0,9)已经消失了,这不是我需要的.
我需要一个想法,如何在二维数组中有效地找到下面标有0的区域.应该注意的是,还有其他区域,例如这张图片显示了两个拥有坐标(0.0)和另一个拥有坐标(21.3)的人之一.
00000000000111110000111
00000000001111110000111
00000000011111100000111
00000000000111000001101
00000000011100000011101
00000001111100001111001
00000111111111011111001
00000001111100001111001
00000000010000000011001
00000000000000000001111
Run Code Online (Sandbox Code Playgroud)
当然,真正的阵列会更大.递归到所有方面并在标记1或阵列侧停止的版本不够快.
今天开始学习haskell for school,我遇到了功能问题.我不明白为什么它不在范围内..
下面是代码:
ff :: [[Char]] -> [[Char]] -> [Char]
ff A B = [[x !! 0, y !! 1] | x <- A, y <- B, (x !! 1) == (y !! 0)]
Run Code Online (Sandbox Code Playgroud)
和错误:
md31.hs:2:4: Not in scope: data constructor `A'
md31.hs:2:6: Not in scope: data constructor `B'
md31.hs:2:38: Not in scope: data constructor `A'
md31.hs:2:46: Not in scope: data constructor `B'
Run Code Online (Sandbox Code Playgroud)
提前致谢 :)