История изменений
Исправление MOPKOBKA, (текущая версия) :
Потому что код — это текст, предоставленный человеком.
Макросы могут нагенерировать и нечто свое.
Он генерировать будет при запуске. А до запуска он вполне конечный.
Ну да, и в Lisp тоже при запуске, в том же и суть ленивых коллекций и генераторов.
Потому что программы которые работают с cons-ячейками могут опираться на то, что структура конечна (иногда допускается один цикл).
Не могут (в текущих реализациях что я видел), даже в твоей последней функции length есть ошибка, cdr может не быть списком. Вообще учитывая как легко допустить рекурсию, я не вижу смысла во встроенных проверках внутри length. При передаче зацикленных структур ошибки часто возникают где то внутри, потому что никому не интересно это проверять каждый раз, но в какой то функции проверка есть, и методом проверки типов Forth они всплывают.
Но я не понимаю смысл разделения, не проще ли сделать проверку на входе? Сделать тип основанный на cons но ограниченный условиями? Имеет смысл ограничивать мощный тип, а не делать дублированные, разные системы.
Исправление MOPKOBKA, :
Потому что код — это текст, предоставленный человеком.
Макросы могут нагенерировать и нечто свое.
Он генерировать будет при запуске. А до запуска он вполне конечный.
Ну да, и в Lisp тоже при запуске, в том же и суть ленивых коллекций и генераторов.
Потому что программы которые работают с cons-ячейками могут опираться на то, что структура конечна (иногда допускается один цикл).
Не могут (в текущих реализациях что я видел), даже в твоей последней функции length есть ошибка, cdr может не быть списком. Вообще учитывая как легко допустить рекурсию, я не вижу смысла во встроенных проверках внутри length.
Но я не понимаю смысл разделения, не проще ли сделать проверку на входе? Сделать тип основанный на cons но ограниченный условиями? Имеет смысл ограничивать мощный тип, а не делать дублированные, разные системы.
Исправление MOPKOBKA, :
Потому что код — это текст, предоставленный человеком.
Макросы могут нагенерировать и нечто свое.
Он генерировать будет при запуске. А до запуска он вполне конечный.
Ну да, и в Lisp тоже при запуске, в том же и суть ленивых коллекций и генераторов.
Потому что программы которые работают с cons-ячейками могут опираться на то, что структура конечна (иногда допускается один цикл).
Не могут (в текущих реализациях что я видел), даже в твоей последней функции length есть ошибка, cdr может не быть списком. Вообще учитывая как легко допустить рекурсию, я не вижу смысла во встроенных проверках внутри length.
Но я не понимаю смысл разделения, не проще ли сделать проверку на входе? Сделать тип основанный на cons но ограниченный условиями?
Исправление MOPKOBKA, :
Потому что код — это текст, предоставленный человеком.
Макросы могут нагенерировать и нечто свое.
Он генерировать будет при запуске. А до запуска он вполне конечный.
Ну да, и в Lisp тоже при запуске, в том же и суть ленивых коллекций и генераторов.
Потому что программы которые работают с cons-ячейками могут опираться на то, что структура конечна (иногда допускается один цикл).
Не могут (в текущих реализациях что я видел), даже в твоей последней функции length есть ошибка, cdr может не быть списком. Вообще учитывая как легко допустить рекурсию, я не вижу смысла во встроенных проверках внутри length.
Исправление MOPKOBKA, :
Потому что код — это текст, предоставленный человеком.
Макросы могут нагенерировать и нечто свое.
Он генерировать будет при запуске. А до запуска он вполне конечный.
Ну да, и в Lisp тоже при запуске, в том же и суть ленивых коллекций и генераторов.
Потому что программы которые работают с cons-ячейками могут опираться на то, что структура конечна (иногда допускается один цикл).
Не могут, даже в твоей последней функции length есть ошибка, cdr может не быть списком. Вообще учитывая как легко допустить рекурсию, я не вижу смысла во встроенных проверках внутри length.
Исходная версия MOPKOBKA, :
Потому что код — это текст, предоставленный человеком.
Макросы могут нагенерировать и нечто свое.
Он генерировать будет при запуске. А до запуска он вполне конечный.
Ну да, и в Lisp тоже при запуске, в том же и суть ленивых коллекций и генераторов.
Потому что программы которые работают с cons-ячейками могут опираться на то, что структура конечна (иногда допускается один цикл).
Не могут, даже в твоей последней функции length есть ошибка. Вообще учитывая как легко допустить рекурсию, я не вижу смысла во встроенных проверках внутри length.