In source listings and pseudocode, it’s customary to typeset function names in a typewriter font. (Although you might prefer a different style, such as sans-serif or small caps.) This often extends to spacing, but if you really want to make this easy to read, I think you want the function and its arguments to be spaced a little closer than binary operators, which are spaced a little more closely than relational operators, to match the order of operations.
So, maybe something like:
\documentclass{article}
\usepackage{amsmath}
\usepackage{inconsolata} % Or your monospace font of choice.
\newcommand\foo[2]{%
\textup{\texttt{foo}}\,\textup{\texttt{#1}}\,\textup{\texttt{#2}}%
}
\begin{document}
\[ \foo{x}{y} + \foo{y}{z} \geq \foo{x}{z}
\]
\end{document}
You can gussy this up still more, of course. For example, this style sort of imitates DEK’s Concrete Math:
\documentclass{article}
\usepackage{amsmath}
\usepackage{inconsolata} % Or your monospace font of choice.
\usepackage{eulervm}
\newcommand\foo[2]{%
\textup{\texttt{foo}}\,{#1}\,{#2}%
}
\begin{document}
\[ \foo{x}{y} + \foo{y}{z} \geq \foo{x}{z}
\]
\end{document}
If you declare more than one or two of these, you want some more generic command to declare an arbitrary source function.
$\foo x\,y
looks right to me,\,
thinspace matches the space from\mathop