2014-02-04 10 views
0

Надеюсь, это уже не было задано. Я видел кучу одного против двойных кавычек для других языков (HTML, JavaScript, Python), но не могу найти схему,Одиночные кавычки и двойные кавычки в схеме

В схеме на переводчика, если я типа:

(что-то «х) Я понимаю, что х будет рассматриваться как х, не оцененной к чему-то, как будто это переменная

с другой стороны, если я использую

(что-то х)

х оцениваются как если его переменная

Я знаю, что "короткую рука для цитаты (то есть (цитата х)), но то, что я не получаю, как это отличается от двойной кавычки ,

Если я печатаю

«привет» в приглашении, я вернусь «привет»

Это единственная разница, что двойные кавычки сохраняет кавычки данных? Я слышал, что двойная кавычка похожа на массив символов, но она не оценивается и ни одна кавычка, так что это разница и когда/почему я должен использовать ее над другой?

Спасибо всем.

+0

двойные кавычки обозначают строковым. Одиночная цитата оператора котировки создаст символ, список или векторный литерал. Для сложных типов каждый элемент рассматривается как символ. http://people.csail.mit.edu/jaffer/r5rs_6.html#SEC27 – WorBlux

ответ

5

В схеме одиночные кавычки и двойные кавычки полностью разные конструкции. Двойные кавычки производят строку:

> (string? "foo") 
#t 

Принимая во внимание, что одиночная кавычка префикса не позволяет оценить выражение. Например. (+ 1 2) вычисляет 3, но когда вы одинарные кавычки это, вы получите список, состоящий из +, 1 и 2:

> (define three '(+ 1 2)) 
> three 
(+ 1 2) 
> (car three) 
+ 
> (cadr three) 
1 
> (caddr three) 
2 

Это фактически синтаксический сахар для оператора называется quote, который можно проверить, процитировав дважды:

> ''foo 
(quote foo) 
+0

Ну ладно спасибо. Я собирал кусок, который «возвращает вам список». Я думал, что это просто похоже на то, что это строка, потому что она не оценила ее. Спасибо всем! – jcam77

+1

@ jcam77 Важным отличием является то, что некоторые формы самооцениваются: «Привет» - это строковый литерал «привет» и его значение само. Аналогично '42' - это номер' 42'.Так как это самооценка, вы можете также процитировать их, если хотите; ''" hello "' производит '' hello" 'и' '42 'производит' 42'. –

0

Важно, что «не оценивается» не означает «не анализируется».

Сравнить:

>'(+ a b) 
(mcons '+ (mcons 'a (mcons 'b '()))) 

>(string->symbol "(+ 1 2)") 
'|(+ 1 2)| 
Смежные вопросы