2010-12-31 1 views
1

ich diesen Fehler:Schema: Wie überprüfen, ob Leere

cdr: expects argument of type <pair>; given #<void> 

und prüfen, ob (null? argument) funktioniert nicht
ich eine Menge für void? Funktion gesucht, aber ich konnte nichts so finden, irgendwelche Ideen ppl :)
danke eine million im voraus

+0

Welche Lisp-Implementierung? –

+0

@Charlie: Diese Fehlermeldung ist ein toter Wecker für Racket (oder PLT-Schema, wenn das OP eine ältere Pre-Racket-Version verwendet). –

Antwort

2

Verwenden Sie einfach pair?, um zu sehen, ob Sie cdr es können. Es gibt keine spezifische Prüfung auf void, da es sich im Wesentlichen um einen Phantomtyp handelt.

0

Chris Antwort ist gut, weil Sie wirklich checken wollen für ein Paar cdr, sondern auch für die Zukunft, können Sie (eq? (void) (void)) wenn (void) verfügbar ist oder (eq? (if #f #t) (if #f #t)) Lage zu tun, wenn Sie Ihre eigene (void) definieren möchten.

+0

Ich glaube nicht, dass ein Standard garantiert, dass der Vergleich zweier unspezifischer Werte mit 'eq?' Einen wahren Wert liefert. Ein solcher Ansatz wird also nicht portabel sein. –