Scheme 写分裂

Scheme 写分裂,scheme,racket,split,Scheme,Racket,Split,我试着从Haskell在Racket Scheme中写下我发现非常有用的splitOn。我最终得到了下面的结果,但效果不太好。我的意思是,它只是运行并吞噬我的记忆。“直到”和“直到”都起作用,那么在“拆分”中我到底做错了什么 我明白了。我没有放弃定界字符,让它永远循环 (define (split-on lst pred) (cons (take-until lst pred) (if (not (null? (drop-until lst pred)))

我试着从Haskell在Racket Scheme中写下我发现非常有用的splitOn。我最终得到了下面的结果,但效果不太好。我的意思是,它只是运行并吞噬我的记忆。“直到”和“直到”都起作用,那么在“拆分”中我到底做错了什么


我明白了。我没有放弃定界字符,让它永远循环

(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)
                                  '())))

请注意,您的代码有很多低效之处,比如多次计算列表的长度,两次使用同一个memf调用,等等。此外,如果Racket在Racket/list中包含drop-until等内容,则此代码可能会更好。这是计划很快发生…是的,我知道代码是丑陋的,大量的重复调用。我现在正在修复它,我只需要先弄清楚逻辑。
(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)
                                  '())))