2016-04-07 62 views
0

Bu fonksiyon, verilen listede !"#%&'()*,-./:;[email protected][\]_{} karakter bulmalıdır. Bu karakterlerden en az bir kez bulunursa, doğru olması gerekir. Fakat bu amaç için uygun önceden tanımlanmış bir işlev bulamıyorum.Şemada karakter kümesini kullanma

(define (is-symbol lst) 
    (if (null? (car lst)) 
    #f 
    (if (char-set:punctuation (car lst)) #t 
      (is-symbol (cdr lst))) 
)) 

(is-symbol '(#\A #\b #\t #\R #\f 3 5 4 7 8 9 #\A #\G #\w #\q $ & ?)) 
+0

Yığın Taşması'na Hoş Geldiniz, soruyu daha kolay okunabilmesi için sorgunuzun metnini kod parçacığının üstünden çektim - bu, Bottom Line Up Front adlı bir tekniktir. [İyi soruların nasıl yazılacağı hakkında harika bir makale var] (http://stackoverflow.com/help/how-to-ask), lütfen okumanızı ve sorunuzu, ne istediğiniz hakkında daha net bir şekilde açıklamayı düşünün. –

cevap

0

Sana char-punctuation? aradığınız inanıyoruz:

(define (is-symbol? lst) 
    (cond ((null? lst) #f) 
     ((char-punctuation? (car lst)) #t) 
     (else (is-symbol (cdr lst))))) 

Veya daha da basit: Sen srfi-14 gibi görünüyor char-set:punctuation, kullandığınız

(define (is-symbol? lst) 
    (ormap char-punctuation? lst)) 
+0

Advance Student dil modunda DrRacket'i kullanıyorum. Bu hatayı veriyor: noktalama işaretleri mi? : Bu işlev tanımlanmamış –

+0

Dili değiştirin, sonra #racket kullanın. Aksi halde, prosedürü kendiniz uygulamak zorunda kalacaksınız. –

0

. İlgili üyelik yüklemi char-set-contains?'dur.