There is no protection against non-termination. For example, an user could give you this function:<p><pre><code>    f = (function (x){ return x(x); })
</code></pre>
Now, if you call `f(function(f){return function(x){ return f(f(x)) }})`, it&#x27;ll not halt. But there are good principled ways to work around that, such as adding a type system like System F. That would discard 100% of the programs that halt, at the cost of also losing some programs that do halt.