>>1307059> почему не писать построчно
Потому что lambda: [doonething(), doanotherthing()][1] - вещь неудобная.
Писать построчно - это буквально писать по-тупому без каких-либо профитов, код на твоём питоне через for-ы и map-ы разительно отличается, в for ты смотришь, что же там у этого for в цикле происходит, а в случае map/reduce/filter или comprehension видишь трансформацию данных сразу и вместо того, чтобы смотреть на управление, ты смотришь на данные. И в консольке пишется проще.
> зачем вообще придумывают языки со скобочками
Если говорить конкретно за лисп, затем, что прямо из пикрелейтеда видно, что синтаксис лиспа расширяем из самого лиспа, его код - это его же данные. Ещё нет никаких разночтений и треша навроде x if y else z, синтаксис стройный и примерно одинаковый, в отличие от.
Если говорить вообще про языки с конструкциями на скобках, которые обычно от пробелов и индентации не зависят - это решение очень разумное, оно облегчает парсинг и кодогенерацию. Не говоря уже о том, что одним тыком в tab или backspace нельзя незаметно испортить control flow и искать, куда там провалился уровень.
Если вернуться к конкретному питону, потихонечку начинаешь понимать, что там, где появляется ООП, кодинг в консольке (как и надо кодить на скриптовом языке) превращается в муку с перезагрузкой всего тела класса. В Common Lisp с его скобочками и CLOS объявление класса и объявление его методов живут своей отдельной жизнью, в разных скобочках. И вбиваются отдельно. В питоне всё это вместе набивается огромной простынёй хоть на сотни, хоть на тысячи строк.