2017-05-26 8 views
0

Sagen wir, ich habe eine Liste wie diese:Scheme Charakter Vergleich

(define test '(r x -)) 

Ich möchte wissen, wie kann ich jedem der Werte in der Liste zu unterscheiden, für exaple:

(define (distinguish test) (equal? (car test) r)) -> Von Natürlich gibt dies einen Fehler zurück, aber ich möchte, dass es #t oder so ähnlich zurückgibt.

Danke für die Hilfe!

+0

Fragen Sie, wie Sie auf die Symbole 'r',' x' a zugreifen können nd '-', wie in' car', 'cadr' und' caddr'? – Sylwester

+0

Nein, ich frage, wie kann ich 'wahr' für die Operation bekommen (gleich? (Autotest) r) Als ob es ** r ** mit ** r ** vergleicht, weil es tatsächlich 'Fehler' zurückgibt –

+1

Sie sollten schreiben: '(definieren (unterscheiden Test) (gleich? (Car Test) 'r))'. – Renzo

Antwort

2

Ein Symbol ist Variable nicht in Code zitierte ein

(define r 'x)  ; define the variable r to be the symbol x 
(eq? (car test) r) ; ==> #f (compares the symbol r with symbol x) 
(eq? (cadr test) r) ; ==> #t (compares the symbol x with the symbol x) 
(eq? (car test) 'r) ; ==> #t (compares the symbol r with the symbol r) 

Symbol in der Liste Vergleich

(define test-list '(fi fa foo)) 
(define test-symbol 'fi) 
(eq? (car test-list) test-symbol) ; ==> #t (compares fi with fi) 
(eq? 'fi 'fi)      ; ==> #t (compares fi with fi) 

Charakter in Stringvergleich (Die Frage Titel ist über nicht Symbolzeichen):

(define test-string "test") 
(define test-char #\t) 
(eqv? (string-ref test-string 0) test-char) ; ==> #t (compares #\t with #\t) 
(eqv? #\t #\t)        ; ==> #t (compares #\t with #\t) 
+0

Danke! Ihre Antwort ist auch sehr hilfreich. –