Как объявить переменную внутри функции схемы?

возможно ли это сделать? Допустим, я хочу получить последний элемент списка, я бы создал переменную 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) (делая