Как мне сделать замыкания в Emacs Lisp?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

26
задан Luke Girvin 4 September 2011 в 01:17
поделиться

4 ответа

Глупая идея: как насчет:

(defun foo (x)
  `(lambda () ,x))

(funcall (foo 10))  ;; => 10
8
ответ дан Ken 4 September 2011 в 01:17
поделиться
  • 1
    Основание только применимо в некоторых случаях. Я также когда-то реализовал гибрид radix/quicksort для контакта с отсутствием памяти - когда там isn' t достаточно памяти для содержания всего основание партия лучше. – Loren Pechtel 29 January 2009 в 15:22

Найденный другим решением с лексически позволенным

(defun foo (n) 
    (lexical-let ((n n)) #'(lambda() n)))

(funcall (foo 10)) ;; => 10
29
ответ дан vava 4 September 2011 в 01:17
поделиться
  • 1
    Я сказал бы, что вид Основания просто имеет более узкий домен приложения, чем Быстрая сортировка. – jfs 24 January 2009 в 10:45

Я не фирма в Lisp Emacs, но насколько я знаю, большая разница от языка Common LISP - то, что это использует динамический обзор повсюду. Руководство Lisp Emacs указывает, что Lisp Emacs не имеет закрытий.

я попытаюсь применить свои теоретические знания динамического обзора.

, Если у Вас есть функция id, который просто возвращает значение my-id:

(defun id ()
  my-id)

и Вы используете его в некоторой другой функции:

(defun some-other-place ()
  (id))

и где-нибудь на пути к вызову id Вы связываете my-id через, например, позволенный:

(defun even-elsewhere ()
  (let ((my-id 5))
    (some-other-place)))

это должно отдать 5.

я знаю, что динамический обзор является странным зверем, когда Вы привыкли к лексическому обзору, но возможно можно использовать это для реализации желаемого поведения.

6
ответ дан Svante 4 September 2011 в 01:17
поделиться
  • 1
    Поэтому не наивный QuickSort является худшим случаем O (n*log (n)). Хотя я don' t знают, используется ли вышеупомянутый алгоритм выбора на самом деле для реализации QuickSort. – jfs 29 January 2009 в 13:29

Шепелявость Emacs только имеет динамический обзор. Существует lexical-let макрос, который приближает лексический обзор посредством довольно ужасного взлома.

7
ответ дан Allen 4 September 2011 в 01:17
поделиться
  • 1
    Как я сказал, высокая вероятность не влияет на худший анализ случая. – shoosh 24 January 2009 в 05:07
Другие вопросы по тегам:

Похожие вопросы: