Phụ thuộc vào cách bạn định nghĩa "tuyên bố" và "biểu thức".
Một định nghĩa rất nghiêm ngặt sẽ phân biệt giữa các câu lệnh là "những thứ có tác dụng phụ và có thể là giá trị trả về" và biểu thức là "những thứ có giá trị trả về, nhưng không thể có tác dụng phụ". Với định nghĩa như vậy, không có chương trình có ý nghĩa nào có thể được viết mà không có ít nhất một câu lệnh (sẽ phải đánh giá một biểu thức và đưa ra giá trị trả về của nó) - một mình các biểu thức thuần túy không thể tương tác với thế giới bên ngoài chương trình. Một ngôn ngữ vẫn có thể hoàn toàn thuần túy (nghĩa là không có bất kỳ tuyên bố nào), nếu phần không tinh khiết được chuyển ra khỏi ngôn ngữ và vào hệ sinh thái hỗ trợ (đó chính xác là những gì Haskell làm, mặc dù ngôn ngữ có định nghĩa cũng như biểu thức) .
Tuy nhiên, nếu bạn cho phép các hiệu ứng phụ trong biểu thức, thì sự khác biệt giữa các câu lệnh và biểu thức trở nên tùy ý và ít thú vị hơn - tất nhiên bạn có thể phát minh ra một ngôn ngữ lập trình chỉ bao gồm các biểu thức; hầu hết các phương ngữ Lisp hoạt động nhiều như thế. Trong tình huống như vậy, việc đánh giá một biểu thức cho các tác dụng phụ của nó hoàn toàn giống với việc thực hiện một tuyên bố và người ta có thể lập luận rằng trong một ngôn ngữ như vậy, các biểu thức và tuyên bố là giống nhau. Sự khác biệt giữa một tuyên bố và một biểu thức, sau đó, chỉ là cú pháp.
Nhiều ngôn ngữ vẫn tạo ra sự khác biệt cú pháp này, bởi vì nó hữu ích không phải vì lý do kỹ thuật, mà vì khả năng đọc. Làm cho một cái gì đó một biểu thức báo hiệu rằng bạn quan tâm đến giá trị trả về của nó, ít hơn vì vậy tác dụng phụ của nó; làm cho nó trở thành một tuyên bố cho người đọc biết rằng bạn dự định gây ra tác dụng phụ và giá trị trả về có thể hoặc không thú vị.