Квазицитат (то есть обратная цитата) - это просто синтаксический suger для построения списка времени выполнения.
Это тоже очень полезный вариант.Во-первых, он дает вам очевидную конструкцию быстрого списка, позволяя вам быстро перейти от оценки к контексту цитаты.
Например, код (cons (append (list a 'b) c) d))
можно записать как `(,a b ,@c ,@d)
(объединение без кавычек, обозначенное ,@
используется для добавления списка, являющегося результатом выражения).
Во-вторых, это позволяет очень быстро отслеживать отладку фрагмента кода.Допустим, у вас есть следующий код:
(define string-split
(lambda (s delim)
(reverse (car (fold-left
(lambda (p ch)
(let ((str-lst (car p))
(char-lst (cdr p)))
(if (char=? ch delim)
(if (null? char-lst)
(cons str-lst '())
(cons (cons (list->string (reverse char-lst)) str-lst) '()))
(cons str-lst (cons ch char-lst)))))
`(() ())
(append (string->list s) `(,delim)))))))
Если вы вызовете его с аргументами "abc def"
и #\space
, вы получите сообщение об ошибке list->string
.Трудно понять, что пошло не так и где, но если вы квазицитируете вызов list->string
и цитируете (используя ,
) аргумент char-lst
, это даст вам хороший совет для начала.