Список, подобный (5 6 7)
, составлен как (cons 5 (cons 6 (cons 7 '())))
, поэтому самое простое решение будет таким:
(genlist 8 7) ; ==> ()
(genlist 7 7) ; ==> (cons 7 (genlist 8 7))
Теперь это не лучший способ сделать это, просто самый простой.Лучшим способом было бы создать список от конца до начала с помощью помощника:
(genlist-helper 6 7 '()) ; ==>
(genlist-helper 6 6 (cons 7 '())) ; ==>
(genlist-helper 6 5 (cons 6 (cons 7 '())) ; ==>
(cons 6 (cons 7 '())
Теперь genlist
просто вызывает помощника, предоставляя пустой список в качестве начального аккумулятора.Это также возможно сделать с помощью локальной процедуры, в которой вам не нужно добавлять первый параметр, поскольку он у вас есть для лексического замыкания, и вы можете даже сделать его намного проще, используя именованный let
.
* 1012Я понятия не имею, как ты это сделал в Python.Я не помню, чтобы у питона были минусы.Знание Алгола, как правило, не помогает при изучении вашего первого языка LISP.Как будто вы делаете предположение, что, поскольку итальянский и испанский языки были настолько похожи, словенский язык должен быть также.