2016-11-25 4 views
1

Я являюсь Emacs новичком и собираемся через этот учебник: https://learnxinyminutes.com/docs/elisp/Emacs-Lisp списки, апостроф ('), и кавычка (апостроф, `)

Я написал этот код:

(defun hello (name) 
    (insert (format "Hello %s!\n" name))) 

(setq list-of-names '("John", "Jane", "Chad")) ;; -1- 

(mapcar `hello list-of-names) ;;-2- 

и когда я сделал C-хс-е в строке 2 результат вышел как:

Hello John! 
Hello (, Jane)! 
Hello (, Chad)! 

так что я посмотрел, что апостроф делает и это короткая рука для цитаты.

(setq list-of-names (quote("John", "Jane", "Chad"))) ;; -1- 

и результаты оказываются одинаковыми. Но когда я случайно заменил апостроф серьезным акцентом (`или SHIFT + ~ на моей клавиатуре), он напечатал правильно.

Hello John! 
Hello Jane! 
Hello Chad! 

Я потратил час, посмотрев, какой серьезный акцент, но пока не повезло. Кто-нибудь знает, что означает серьезный акцент в emacs?

Я использую emacs-w32 с корейской/английской клавиатурой.

+0

FYI: 'M-x elisp-index-search RET \' RET' (один из «самодокументирующих» аспектов Emacs). Напечатайте 'C-h i h', чтобы научиться использовать считыватель Info - это принесет огромные дивиденды. – phils

+0

Ваше первое недоразумение, и самое главное, состоит в том, как ** список ** элементов разделен в Lisp: используйте пробелы, а не запятые. Второй заключается в том, что backquote вводит специальный контекст, в котором запятая имеет особое значение. – Drew

ответ

3

` похож на ', но когда вы можете использовать , префикс символы, которые не котироваться. См. «Backquote» в руководстве Elisp.

Списки в lisp не разделяются запятой.

(setq list-of-names `("John" "Jane" "Chad" ,(current-time-string))) 
(mapcar 'hello list-of-names) 
Смежные вопросы