个人而言,我认为当您从该类型中删除多余的括号(像非化学家会写的)时,它会变得更加明显:
int -> (int -> bool -> int) -> bool -> int
因此,您应该写出一个函数,该函数给出三个参数,并返回一个 int
。也就是说,一个解决方案必须以窗体的形式表达:
lambda n. lambda f. lambda b. ____
但是,您如何填入洞口? 那么, 查看您从参数中获得的种类, 很容易看到您可以通过将 < code> f code > 应用到 < code>n code > 和 < code>, 产生 < code > b code >, 并产生一个 < code > int code >, 来将其连接到一起。 因此 :
lambda n. lambda f. lambda b. f n b
一种解决办法。但仔细看这个术语时,人们注意到,最深层的羊羔实际上可以被deta-redied, 给出一个更简单的术语:
lambda n. lambda f. f n
但事实上,问题有点堕落,因为归还一个暗号总是微不足道的。所以最简单的解决办法可能是:
lambda n. lambda f. lambda b. 0
求得解决方案的一般方案通常是通过简单诱导方式在类型结构上找到解决方案:如果您需要函数,请先写下羊羔,然后与身体同步进行。如果您需要图普,请先写下图普,然后与其组件同步进行。如果您需要原始类型,可以选择一个常数。如果您需要一些您没有的参数(通常在多形态情况下),请在范围中寻找一些能给您带来这种东西的功能参数。如果该参数本身是一个函数,请尝试反复构建一个合适的参数。