>>14
Practically requires a stack-based implementation
Only if you allow functions with a variable number of input or output values. Which isn't really useful anyway (see your first point).
special cases in the parser (inflexible)
Unless you have parser macros. But I agree with the sentiment.
Determining whether a given token is a function call or variable requires either a lookup table or extra syntax
Variables and constants are conceptually functions that take nothing and return one value. E.g. in Factor:
( scratchpad ) [ 1 ] infer.
( -- object )
Program errors that disrupt the stack are easy to make and difficult to diagnose
Which is why you use a type system that helps you with that.
Anyway, I'm a Schemer because λ > SKI and naming things is the greatest thing ever.