Dipende da come definite "statement" e "expression".
Una definizione molto rigida distinguerebbe tra affermazioni come "cose che hanno effetti collaterali e forse un valore di ritorno" ed espressioni come "cose che hanno valori di ritorno, ma non possono avere effetti collaterali". Con tale definizione, nessun programma significativo può essere scritto senza almeno un'istruzione (che dovrebbe valutare un'espressione e produrre il suo valore di ritorno) - le espressioni pure da sole non possono interagire con il mondo al di fuori del programma. Un linguaggio da solo può ancora essere completamente puro (cioè non avere alcuna dichiarazione), se la parte impura viene spostata fuori dalla lingua e nell'ecosistema di supporto (che è esattamente quello che Haskell fa, sebbene il linguaggio abbia definizioni e espressioni) .
Se, tuttavia, permetti effetti collaterali nelle espressioni, allora la distinzione tra istruzioni ed espressioni diventa arbitraria e molto meno interessante - ovviamente puoi inventare un linguaggio di programmazione che consiste solo di espressioni; la maggior parte dei dialetti Lisp funziona in questo modo. In una situazione del genere, valutare un'espressione per i suoi effetti collaterali è praticamente la stessa cosa dell'esecuzione di una dichiarazione, e si potrebbe sostenere che in un tale linguaggio, espressioni e affermazioni sono la stessa cosa. La differenza tra un'istruzione e un'espressione, quindi, è solo sintattica.
Molte lingue fanno ancora questa distinzione sintattica, perché è utile non per ragioni tecniche, ma per la leggibilità. Fare qualcosa di un'espressione segnala che sei interessato al suo valore di ritorno, meno i suoi effetti collaterali; rendendola una dichiarazione dice al lettore che intendi causare effetti collaterali, e il valore restituito può essere interessante o meno.