我已经将我的树定义如下:
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) 在LYAHFGG中,有一章说该列表定义为:
data List a = Cons a (List a) deriving (Show, Read, Eq, Ord)
Run Code Online (Sandbox Code Playgroud)
我理解除了缺点之外,大多数这意味着什么.当我尝试:t Cons并:i Cons在ghci我得到一个不在范围错误.在本章后面,它还讨论了: - 和它与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) 为问题所说的内容编写一个方法,需要找到特定左括号第 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)