In functional programming languages (ML, Haskell, F#, OCAML), any function just has one argument - Multi-parameter-functions are represented by passing tuples or Currying. Thus there is no need for a function to enclose the parameter in parentheses.
Ex #1:
inc x = x + 1
res = inc 42
Ex #2:
sum a b = a + b
res = sum 1 2
In #2, you pass 1
to sum
and then call the resulting function with 2
(Currying)
Additionally, you can use mechanims like function composition, pipelines or the $-operator (point-free style).
Just compare the two examples.
a = f(g x)
b = f $ g x
print(square(parse "Hello"))
"Hello" |> parse |> square |> print
Another way of reducing parentheses in other languages is introducing extension methods (similar to pipelines) or the arrow-operator.
Compare:
ToString(Parse(42))
"42".Parse().ToString()
(*(*SomePointer).SomeMember).Invoke();
SomePointer->SomeMember->Invoke();
Ruby and Perl allow subroutines to be called without parentheses, VBC-style languages (Visual Basic, VBScript) do this too.
Lisp/Scheme don't need parentheses for their function calls too (but there are many parentheses anyway^^)