CF1578H Higher Order Functions
题目描述
Helen 学习函数式编程,并对高阶函数的概念非常着迷——即那些将其他函数作为参数的函数。她决定对函数阶的概念进行推广,并在一些例子上进行测试。
在她的研究中,她定义了一种简单的类型文法。在她的文法中,类型非终结符 $T$ 定义如下产生式之一,并且给出了 $ \textrm{order}(T) $,即对应类型的阶:
- "()" 是单位类型,$ \textrm{order}(\textrm{"}\texttt{()}\textrm{"}) = 0 $。
- "(" $T$ ")" 是带括号的类型,$ \textrm{order}(\textrm{"}\texttt{(}\textrm{"}\,T\,\textrm{"}\texttt{)}\textrm{"}) = \textrm{order}(T) $。
- $T_1$ "->" $T_2$ 是函数类型,$ \textrm{order}(T_1\,\textrm{"}\texttt{->}\textrm{"}\,T_2) = \max(\textrm{order}(T_1) + 1, \textrm{order}(T_2)) $。函数构造符 $T_1$ "->" $T_2$ 是右结合的,因此类型 "()->()->()" 等价于 "()->(()->())",即返回一个函数的函数,其阶为 $1$。而 "(()->())->()" 是一个以阶为 $1$ 的类型 "(()->())" 作为参数的函数,其阶为 $2$。
Helen 需要你的帮助,编写一个程序来计算给定类型的阶。
输入格式
输入仅一行,包含由字符 '('、')'、'-' 和 '>' 组成的字符串,描述了一个符合题目描述文法的类型。该行长度不超过 $10^4$ 个字符。
输出格式
输出一个整数,表示给定类型的阶。
说明/提示
由 ChatGPT 4.1 翻译