Of course you could work around s-expressions (and make your ALGOL-formatted language looks like Lisp, a common complaint against my own code by my coworkers), that wasn't my argument.
Most aren't fond of Lisp syntax, regardless of how you dress it up, and thus writing in Lisps doom you to have fewer people to hand over your code to, and I don't think that scarcity is useful.
I suspect the reason most don't like s-expression is that it forces the human reader to maintain a "mental stack", an exercise humans are not too good at, as demonstrated by human languages aversion of center embeddings.
You seem to be stuck on this idea of deep function call nesting being an impediment, which is solved by foo.bar().baz() chained syntax using object dot notation.
But most mainstream languages have chained function call notation as a feature.
Furthermore, foo.bar().baz()... chaining is a fairly recently emerging idiom. It has been possible in a number of languages for decades already, but somehow didn't take off. You would hardly see chains of foo.bar().baz().xyzzy() in 1990 vintage C++ code bases, even though 1985 vintage C++ would easily support it.
Anyway, there is a dialect of Lisp which has integrated the dot syntactic sugar into S-expressions, according to this basic idea:
This is the TXR Lisp interactive listener of TXR 257.
Quit with :quit or Ctrl-D on an empty line. Ctrl-X ? for cheatsheet.
Poke a few holes in TXR with a fork before heating in the microwave.
1> '(quote x) ;; i.e. just like we have a 'x -> (quote x) sugar ...
'x
2> '(qref x)
(qref x)
3> '(qref x y) ;; we can have a x.y -> (qref x y) sugar
x.y
4> '(qref x y z)
x.y.z
5> '(qref x y z w)
x.y.z.w
6> '(qref x y 3 w) ;; (let's not when it's ambiguous with floating-point)
(qref x y 3 w)
7> '(uref x) ;; ... and a .x.y (uref x y) sugar
.x
8> '(uref x y)
.x.y
9> '(uref x y z)
.x.y.z
10> '(uref x y 3 w)
(uref x y 3 w)
Embedded compounds are possible, of course:
11> '(qref (a) (b) c (d) e f (g))
(a).(b).c.(d).e.f.(g)
I never intended this to be used for chaining! In fact, only in a fairly recent update to the list-builder object, did I fix it so it can do this:
Needless to say, the methods have to return the object in order to make this possible. Before the update, the methods didn't have a specified return value.
In the first place, list-builder is an implementation mechanism under the build macro, which expresses it like this:
so there is no reason to use list-builder directly in most code.
This chaining business is a minor benefit (if at all) of the dot notation. The main motivation is to make programming with structures and OOP more ergonomic. It has a big impact for programs that use data structures, because the use of data structures and OOP can pervade the entire program, and is a driver behinds its structure.
Anyway, anyone discussing S-expressions under the assumption that they do not have a dot notation that can be used for function chaining is simply unaware of the research having been done in this area in the TXR Lisp project.
Most aren't fond of Lisp syntax, regardless of how you dress it up, and thus writing in Lisps doom you to have fewer people to hand over your code to, and I don't think that scarcity is useful. I suspect the reason most don't like s-expression is that it forces the human reader to maintain a "mental stack", an exercise humans are not too good at, as demonstrated by human languages aversion of center embeddings.