2013-02-28 2 views

ответ

1

Прежде всего, маловероятно, что вы хотите, чтобы имя было '(bill), которое представляет собой список, состоящий из одного символа 'bill. Вы, вероятно, просто хотите 'bill напрямую. Во-вторых, вы не можете использовать = для сравнения символов: = предназначен для числовых сравнений. symbol=?, вероятно, что вы хотите: (. Обратите внимание, что есть некоторые другие функции равенства, которые будут работать здесь, и вы также можете увидеть другие люди используют eq? или equal? вместо symbol=? здесь)

(if (symbol=? name 'bill) ...) 

2

Процедура, используемая для проверки равенства, зависит от типа сравниваемых операндов. В частности, = процедура используется для сравнения между номерами:

(= 1 1) 

Но что, кажется, не так. Если name символ:

(symbol=? name 'bill) 

Если name является строкой:

(string=? name "bill") 

Если name это один символ:

(char=? name #\b) 

Если имя всписок:

(member name '(bill)) 

Наконец, если вы не уверены в типе названия, вы всегда можете использовать equal?:

(equal? name "bill") 
+0

+1 за наконечник на конце. Обычно вы не будете использовать _wrong_, используя 'equal?'. Вы можете пойти _slow_ (медленнее, чем необходимо), это все. Например, было бы несколько быстрее сравнить два символа с 'eq?', Но ваша программа будет работать правильно, если вы используете 'equal?'. –

Смежные вопросы