¿Por qué Matlab no le permite llamar a las funciones dos veces o indexarlas como en f (x) (y)?

Qué estás intentando lograr ? Probablemente podría hacer algo como esto creando una matriz de manejadores de funciones, similar a una matriz de punteros de función en C / C ++. Entonces podría decidir si evaluar, por ejemplo, el pecado, cos o tan de un argumento dado x. Esto debería ser sencillo si todas sus funciones tienen la misma firma (de lo contrario, no). Avísame si eso ayuda.
Alternativamente, su pregunta podría ser sobre una técnica de CS llamada “curry”; la respuesta anterior es insinuar eso. Si ese es el caso, prueba Wikipedia.

Una última reflexión: si, al “llamar a una función dos veces”, quiere decir:

y = f (f (x));

entonces, eso es completamente legal. Si quisiera llamar a la función, digamos, 10 veces, necesitaría:

r = x;

para n = 1:10
r = f (r);
fin

Si está casado con la idea de una llamada de función de una línea, podría poner ese bucle en una definición de función, que podría ser recursiva. En resumen, hay varias formas bastante sencillas de hacer esto, si he entendido su pregunta correctamente.

Si tiene una función que toma 2 argumentos, algunos (muy pocos) lenguajes de programación le permiten construir “funciones parciales”. Por ejemplo, en el caso anterior, si [math] f (x, y) [/ math] es la función que devuelve [math] x \ times y [/ math], entonces [math] f (3) [/ math ] podría interpretarse como la función que toma un argumento y lo multiplica por [math] 3 [/ math].

Muy pocos lenguajes de programación permiten esto, porque muy pocos lenguajes de programación se construyen alrededor de tener funciones como objetos por derecho propio.

Si está interesado en este tipo de cosas, es posible que desee buscar lenguajes de programación funcionales como LISP, Scheme, Haskell y Scala.