小编Hap*_*pal的帖子

在Haskell中为二进制搜索树实现O(log n)Foldable.elem

考虑二叉树的以下定义:

data Tree a = Nil | Node (Tree a) a (Tree a)
Run Code Online (Sandbox Code Playgroud)

Foldable实例可以被定义为如下:

instance Foldable Tree where
  foldr _ z Nil = z
  foldr f z (Node l d r) = foldr f (f d (foldr f z l)) r
Run Code Online (Sandbox Code Playgroud)

但问题是elem函数运行O(n)而不是O(log n).当我尝试实现自定义时elem:

elem x Nil = False
elem x (Node l d r)
  | x == d = True
  | x < d = elem x l
  | otherwise …
Run Code Online (Sandbox Code Playgroud)

haskell

5
推荐指数
0
解决办法
109
查看次数

使用lens-aeson提取JSON字段时组合棱镜

我有一个类似于以下内容的JSON Blob:

[
  {
    "version": 1
  },
  {
    "version": "3"
  },
  ...
]
Run Code Online (Sandbox Code Playgroud)

请注意,有些版本是数字,有些是字符串。我想获取版本列表。我可以使用以下镜头组合来提取数字版本:

v1 :: [String]
v1 = obj ^.. AL.values . AL.key fieldName . AL._Number . to show
Run Code Online (Sandbox Code Playgroud)

然后下面提取字符串

v2 :: [String]
v2 = obj ^.. AL.values . AL.key fieldName . AL._String . to T.unpack
Run Code Online (Sandbox Code Playgroud)

但是,如何通过一次遍历列表来获得版本列表?是否有任何镜头组合器需要镜头AL._Number . to showAL._String . to T.unpack返回组合的吸气剂,以便如果第一个失败,则尝试第二个?msum镜片像什么?

json haskell lenses aeson haskell-lens

1
推荐指数
1
解决办法
253
查看次数

标签 统计

haskell ×2

aeson ×1

haskell-lens ×1

json ×1

lenses ×1