Согласно этим лекционным заметкам Дэвида Шмидта:
Выразимые значения - это значения, которые могут быть получены с помощью выражений в коде, таких как строки, числа, лямбда-выражения / анонимные функции (на языках, которые их поддерживают) и т. Д.
Значения, помеченные как - это значения, которые могут быть названы (привязаны к идентификатору) и переданы позже, например значения переменных или именованных функций.
Например, язык может иметь синтаксис для объявления именованных функций, но не иметь синтаксиса выражений для анонимных функций. Поэтому (если я правильно понимаю) на этом языке функции будут денотируемыми, но не выразимыми .
Единственный пример, который я смог найти для значений , которые выразимы, но не могут быть помечены являются значениями ошибок (в в некоторых теоретических языках p.11 ), который может быть получен с помощью выражения (например, 1/0
), но не может быть привязан к идентификатору (сохраненному в переменной).
(Предполагается, что оператор присваивания распространяет ошибку, а не просто сохраняет значение ошибки в переменной.)
Анонимные типы также несколько похожи. Например, в C # вы можете определить анонимный объект, который имеет анонимный тип, который не может быть привязан к идентификатору (не подлежит изменению):
// anonymous objects can only be saved into a variable by using type inference
var obj = new { Name = "Farah", Kind = "Human" };