2016-04-04 3 views
1

В схеме я запускаю (quote (+ 2 3)) returns (+ 2 3). Из того, что я понял, цитата просто попросила Scheme не оценивать мое выражение для какой-то цели. Я пытаюсь сделать список (+ 2 3) без использования цитаты. Так что я пробовал:
Введенные: возвращение (cons '+' (cons 2 (cons 3 '())))
Scheme в: (+ cons 2 (cons 3 (quote())))
- Я не понимаю, почему я получил это возвращаемое значение. Я надеялся на (+ 2 3)
типизированных: возвращение (cons '+' (2,3))
Scheme в: (+ 2 3)
- Я не понимаю, как это работает. Итак, есть (cons '+' (2,3)) так же, как (quote (+ 2 3))?Представление списка цитируемых выражений в схеме

+1

У вас слишком много кавычек. Вы хотите '(cons '+ ...)', а не '(cons' + '...)'. –

+0

@AlexisKing О, я думал, что мне нужно «+» сказать, что + является символом then »(), чтобы указать список NULL –

+1

@AnonymousGal Символ' + '. Символ будет записан как '# \ +'. Когда вы используете две одинарные кавычки, первый цитирует символ '+' -symbol, а второй цитирует следующий список. – jkiiski

ответ

0

'expression такой же a (quote expression) и будет expression не оценено.

Когда вы пишете (cons '+ '(cons 2 (cons 3 '()))), вы указываете как +, так и второй аргумент, (cons 2 (cons 3 '())). ' не имеет маркера конца.

При отображении пары лисповской системы по умолчанию для отображения пары с парой хвоста в виде списка, если вы задавались вопрос, почему она не превратилась в (+ . (cons 2 (cons 3 (quote()))))

реализация может выбрать способ отображения '(quote()) и ''(). Шахтное шоу '() пока ваше шоу (quote()). Они представляют собой то же самое, так что это не совсем так, как в других вещах, чем визуализация.

`(1 , 2) такое же, как (list '1 2), так как вы являетесь 2. К счастью для вас это число, и он всегда оценивает себя. Возможно, вы, хотя запятая, были чем-то вроде разделения между элементами, но это не так. Это просто упростить запись большой структуры данных, где только несколько элементов являются переменными.

(define (test e) 
    `(a list with ,e representing some wanted structure)) 

(test 'test) ; ==> (a list with test representing some wanted structure)