Reduce over an empty vector. APL answers.
+/⍬
0
×/⍬
1
∧/⍬
1
Each primitive carries its identity. Zero for plus. One for times and for and. ⌈/⍬ gives the most negative number the interpreter has. No special case in the caller. No length check before the reduction.
A dfn gets nothing of the sort. {⍺+⍵}/⍬ is a DOMAIN ERROR in Dyalog. Same arithmetic, no identity, because the interpreter can't know one for an arbitrary function.
Most languages I read decide this per function. Sum returns zero, max throws or returns an empty option, product sometimes isn't there at all. In APL it is one rule. Anyone else bothered by how many languages turn it into a table?