Ответ 1
О, мой! Это много работы. Если я правильно понимаю вашу проблему, я бы использовал regexp-split для этого:
#lang racket (regexp-split #px" " "bc thtn odnth")
= >
Language: racket; memory limit: 256 MB. '("bc" "thtn" "odnth")
Мне просто интересно, есть ли функция разделения строк? Что-то вроде:
> (string-split "19 2.14 + 4.5 2 4.3 / - *")
'("19" "2.14" "+" "4.5" "2" "4.3" "/" "-" "*")
Я не нашел его и не создал своего. Время от времени я использую схему, поэтому я буду благодарен, если вы исправите ее и предложите лучшее решение:
#lang racket
(define expression "19 2.14 + 4.5 2 4.3 / - *")
(define (string-split str)
(define (char->string c)
(make-string 1 c))
(define (string-first-char str)
(string-ref str 0))
(define (string-first str)
(char->string (string-ref str 0)))
(define (string-rest str)
(substring str 1 (string-length str)))
(define (string-split-helper str chunk lst)
(cond
[(string=? str "") (reverse (cons chunk lst))]
[else
(cond
[(char=? (string-first-char str) #\space) (string-split-helper (string-rest str) "" (cons chunk lst))]
[else
(string-split-helper (string-rest str) (string-append chunk (string-first str)) lst)]
)
]
)
)
(string-split-helper str "" empty)
)
(string-split expression)
О, мой! Это много работы. Если я правильно понимаю вашу проблему, я бы использовал regexp-split для этого:
#lang racket (regexp-split #px" " "bc thtn odnth")
= >
Language: racket; memory limit: 256 MB. '("bc" "thtn" "odnth")
Как ссылка для других Schemers, я сделал это в Chicken Scheme с помощью irregex
egg:
(use irregex)
(define split-regex
(irregex '(+ whitespace)))
(define (split-line line)
(irregex-split split-regex line))
(split-line "19 2.14 + 4.5 2 4.3 / - *") =>
("19" "2.14" "+" "4.5" "2" "4.3" "/" "-" "*")
Ну, вы можете использовать простой старый string-split
> (string-split "19 2.14 + 4.5 2 4.3 / - *")
'("19" "2.14" "+" "4.5" "2" "4.3" "/" "-" "*")
Это часть ракетки http://docs.racket-lang.org/reference/strings.html#%28def._%28%28lib._racket%2Fstring..rkt%29._string-split%29%29