История изменений
Исправление
MOPKOBKA,
(текущая версия)
:
Ну значит это зацикленные списки а не бесконечные, на них твоя функция вылетает. Ошибку бы какую нибудь... Без сторонних функций типа fold.
(defun my-length (list)
(labels ((recurse (list result)
(if list (recurse (cdr list) (1+ result)) result)))
(recurse list 0)))
(defvar lst '(1 2 3 nil))
(setf (cdr (cdr (cdr lst))) lst)
(my-length lst) ;; stack overflow
Хотя я уже придумал как это можно было бы функционально красиво выразить.
Исправление
MOPKOBKA,
:
Ну значит это зацикленные списки а не бесконечные, на них твоя функция вылетает. Ошибку бы какую нибудь... Без сторонних функций типа fold.
(defun my-length (list)
(labels ((recurse (list result)
(if list (recurse (cdr list) (1+ result)) result)))
(recurse list 0)))
(defvar lst '(1 2 3 nil))
(setf (cdr (cdr (cdr lst))) lst)
(my-length lst) ;; stack overflow
Исходная версия
MOPKOBKA,
:
Ну значит это зацикленные списки а не бесконечные, на них твоя функция вылетает
(defun my-length (list)
(labels ((recurse (list result)
(if list (recurse (cdr list) (1+ result)) result)))
(recurse list 0)))
(defvar lst '(1 2 3 nil))
(setf (cdr (cdr (cdr lst))) lst)
(my-length lst) ;; stack overflow