Как объявить переменную внутри функции схемы?
возможно ли это сделать? Допустим, я хочу получить последний элемент списка, я бы создал переменную i = 0
, и увеличьте его до тех пор, пока он не будет равен длине. Есть идеи? Пример был бы весьма признателен.
спасибо,
2 ответов
существует несколько способов объявить переменную; самый чистый -let
:
(let ((x some-expr))
; code block that uses x
но вам не нужно это, чтобы получить последний элемент списка. Просто используйте рекурсию:
(define (last xs)
(if (null? (cdr xs))
(car xs)
(last (cdr xs))))
Примечание: Если вы хотите, вы можете использовать переменную в кэш С:
(define (last xs)
(let ((tail (cdr xs)))
(if (null? tail)
(car xs)
(last tail))))
да, можно определить локальные переменные в схеме, используя let
или define
внутри функции. Используя set!
, это также можно переназначить переменную, как Вы себе представляете.
это, как говорится, вы, вероятно, не должны решать свою проблему таким образом. В Scheme это вообще хорошая практика, чтобы избежать set!
когда вам не нужно (и в этом случае вам определенно не нужно). Дальнейшая итерация по списку с использованием индексов обычно является плохой идеей, поскольку списки схемы связанные списки и как таковой произвольный доступ O (n) (делая