小编use*_*064的帖子

如何折叠树而不使其成为可折叠的实例?

我已经将我的树定义如下:

data Tree a
  = Tip
  | Node (Tree a) a (Tree a)
  deriving Show
Run Code Online (Sandbox Code Playgroud)

并使其成为Functor的一个实例:

instance Functor Tree where
  fmap f Tip                       = Tip
  fmap f (Node leftsub x rightsub) = Node (fmap f leftsub) (f x) (fmap f rightsub)
Run Code Online (Sandbox Code Playgroud)

现在我想定义以下函数来折叠树:

foldTree :: b -> (b -> a -> b -> b) -> Tree a -> b
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的东西,但我认为它不起作用,因为树不是幺半群:

foldTree f z Tip = Tip
foldTree f z (Node leftsub x rightsub) = foldr f leftsub ++ f x ++ …
Run Code Online (Sandbox Code Playgroud)

tree haskell functional-programming fold

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

缺点和: - :在Haskell中意味着什么?

LYAHFGG中,有一章说该列表定义为:

data List a = Cons a (List a) deriving (Show, Read, Eq, Ord)
Run Code Online (Sandbox Code Playgroud)

我理解除了缺点之外,大多数这意味着什么.当我尝试:t Cons:i Consghci我得到一个不在范围错误.在本章后面,它还讨论了: - 和它与Cons的相同之处

infixr 5 :-:  
data List a = Empty | a :-: (List a) deriving (Show, Read, Eq, Ord)  
Run Code Online (Sandbox Code Playgroud)

但我真的不明白这:-:意味着什么.

在另一个资源中,在有关数据类型的部分中,它们定义以下数据类型:

data Expr = X
      | Const Int
      | Expr :+: Expr
      | Expr :-: Expr
      | Expr :*: Expr
      | Expr :/: Expr
      | IfZero Expr Expr Expr
      deriving (Eq, Ord) …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming

2
推荐指数
2
解决办法
7860
查看次数

在 Ruby 中查找第 n 次出现的变量正则表达式?

为问题所说的内容编写一个方法,需要找到特定左括号第 n 次出现的索引(由用户定义,即如果用户提供带有附加参数 '{' 和 '5' 的字符串,它将找到这是第五次出现,与“(”和“[”)相同。

目前使用 while 循环来比较每个字符,但这看起来很难看并且不是很有趣,有没有办法用正则表达式来做到这一点?可以在正则表达式中使用变量吗?

def _find_bracket_n(str,left_brac,brackets_num)
  i = 0
  num_of_left_bracs = 0
  while i < str.length && num_of_left_bracs < brackets_num
    num_of_left_bracs += 1 if str[i] == left_brac
    i += 1
  end
  n_th_lbrac_index = i - 1
end
Run Code Online (Sandbox Code Playgroud)

ruby regex

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

标签 统计

functional-programming ×2

haskell ×2

fold ×1

regex ×1

ruby ×1

tree ×1