Haskell - Create Set(唯一排序列表) - 没有递归,没有nub

Mat*_*att 3 haskell duplicate-removal

是否可以创建一个函数来创建一个带有列表输入的集合.

没有使用递归我只是想不出任何办法.

我可以使用高阶函数,如折叠,滤镜,地图,zip.我只是无法在我的函数中进行递归.

显然我不能使用小块.

我一直在试图弄清楚如何摆脱重复没有递归或任何类型的循环(至少我不认为我们可以使用循环,要问).

sep*_*p2k 10

一种方法:

  1. 对列表进行排序.
  2. 用尾巴邮编列表(例如转[1,1,2,3][(1,1),(1,2),(2,3)])
  3. 删除两个项目相同的所有对.
  4. 返回包含已排序列表的第一个元素的列表,后跟压缩列表中每对的第二个项目.

在代码中:

import Data.List

setify [] = []
setify xs = x : map snd (filter (uncurry (/=)) (zip sxs (tail sxs)))
    where sxs = sort xs
          x   = head sxs
Run Code Online (Sandbox Code Playgroud)

  • 你可能不应该给代码,只是方法,因为这是作业... (4认同)