Ответ 1
В нем ядро, по сути, прозрачность - это оценка выражений. По сути, в нем говорится, что если вы оцениваете выражение в контексте, оно будет оценивать одно и то же значение, если вы оцениваете его в любом идентичном контексте.
За исключением того, что утверждения "return" вообще не оцениваются. Они приводят к тому, что текущий вызов метода включения оценивается. Не существует способа, который бы соответствовал понятию прозрачности ссылок. Аналогичная проблема имеет и оператор "throw".
Для примеров первый
def foo(n:Int): Int = return n + 1
является доброкачественным, но многословным и неидиоматическим. Второй
def foo(ns: List[Int]): Any = ns.map(n => return n + 1)
является гораздо более проблематичным. Если он прошел пустой список, он возвращает пустой список. Если передан не пустой список, он возвращает значение главы списка плюс 1.