Письмо разделено на - PullRequest
       15

Письмо разделено на

0 голосов
/ 22 апреля 2011

Я пытался написать (что я нашел) очень полезный splitOn от Haskell в Racket (Схема). Я закончил с тем, что следует, и это не совсем работает. Под этим я подразумеваю, что он просто работает и пожирает мою память. take-until и drop-until оба работают, так что я делаю неправильно именно в split-on?

(define (split-on lst pred)
  (cons (take-until lst pred) (split-on (drop-until lst pred) pred)))

(define (take-until lst pred)
  (take lst (- (length lst)
               (if (memf pred lst)
                   (length (memf pred lst))
                   0)))) 

(define (drop-until lst pred)
  (drop lst (length (take-until lst pred))))

1 Ответ

0 голосов
/ 22 апреля 2011

Разобрался. Я не отбрасывал символ-разделитель, чтобы он зацикливался навсегда.

(define (split-on lst pred)
  (cons (take-until lst pred) (if (not (null? (drop-until lst pred)))
                                  (split-on (cdr (drop-until lst pred)) pred)
                                  '())))
...