2017-02-05 11 views
0

umwandelt So habe ich eine Liste von Elementen, die ich aus einer Datei erstellt habe. Ich bin in der Lage, die Datei zu lesen und die Elemente erfolgreich in meine Liste aufzunehmen, aber ich habe Probleme beim Konvertieren/Umwandeln dieser Elemente in Strings.Wie man Elemente in einer Liste in Strings im Racket

So zum Beispiel:

'(Apple Orange banana pickle) 

und:

(for ([i lst]) 
     (print i) 
    ) 

produziert:

'Apple'Orange'banana'pickle 
(print myList) 

produziertdie keine Zeichenfolgen sind.

Ich möchte wirklich nur eine Liste von Zeichenfolgen, damit ich sie später manipulieren kann. Racket-Dokumentation scheint nur zu zeigen, wie man sich um Chars kümmert. Wie soll ich das machen? Danke für jede Hilfe!

+0

Ich würde ein Anfängerbuch wie "The Little Schemer" oder "Wie man Programme entwerfen" empfehlen, um einen Eindruck davon zu bekommen, wie wir Probleme in Scheme lösen. Derzeit schreiben Sie Code auf nicht-idiomatische Weise, als ob Sie eine traditionelle prozedurale Sprache verwenden würden. –

+0

Beachten Sie, dass 'display' die richtige Funktion ist, wenn Daten ohne Verkapselung angezeigt werden sollen. Auch wenn Sie so etwas wollen, dann ist 'write' vielleicht besser. – Sylwester

Antwort

0

Ich glaube, ich habe meine Antwort gefunden. Ich glaube, dass die Gegenstände, die ich in meiner Liste habe, im Schläger "Symbole" genannt werden. So gibt es eine Methode "symbol-> string", die Sie verwenden können.

So definierte ich eine neue Liste „string“ genannt, und das tat:

;Create new list to be list of strings 
(define stringList '()) 

;convert symbols from list into strings and add to stringList 
(for ([i myList]) 
    (set! i (symbol->string i)) 
    (set! stringList (cons i stringList)) 
) 

noch Würde gerne ein Feedback zu hören!

+0

Beachten Sie, dass Elemente in der Ausgabeliste in umgekehrter Reihenfolge angezeigt werden. –

+2

Verwenden Sie 'for' nicht, um dies zu tun, verwenden Sie' for/list' (oder 'map', wie @óscarLópez suggeriert). 'set!' ist fast nie das, was du willst. –

+0

Bitte nicht 'set!' Verwenden! –

1

Es gibt eine einfachere, idiomatische Weise mit dem eingebauten in map Verfahren zusammen mit symbol->string, die genau die Umwandlung führt Sie brauchen:

(map symbol->string '(apple orange banana pickle)) 
=> '("apple" "orange" "banana" "pickle") 

dass Denken Sie daran, in Scheme, die meiste Zeit vermeiden wir Operationen mutiert wie set! - Schema begünstigt einen funktionalen Stil der Programmierung, wo wir neue Daten erstellen, anstatt sie zu modifizieren.

Beachten Sie auch, dass wir explizite Schleifen vermeiden - es gibt eingebaute Prozeduren zum Manipulieren von Listen in jeder denkbaren Weise, und für die seltenen Fälle, in denen wir keine Prozedur finden, die unseren Anforderungen entspricht, verwenden wir Rekursion .

Verwandte Themen