ここにいくつかのヒントがあります。
次の ormap 式:
(define (in-chars? c chars)
(ormap (lambda (ch) (equal? c ch)) (string->list chars)))
次のように書くことができます
(memv c (string->list chars))
の if 式
(define (match pattern text)
(define remainders (pattern text))
(if (not (set-empty? remainders))
(substring text 0 (- (string-length text)
(string-length (argmin string-length
(set->list remainders)))))
#f))
次のように書くことができます
(and (not (set-empty? remainders))
(substring ...)
ただし、あなたの機能は小さくて要点なので、あまり変更しません。
文字列を操作するためのより便利な構文は、文字列操作プログラムの読み書きを容易にします。数年前、私は concat マクロを作成しようと試みました。
私はこれを使って、Norvig のスペル チェックを実装しました (彼の元の記事に興味があるかもしれません)。結果のスペル チェックと concat マクロについては、こちらで説明しています。
http://blog.scheme.dk/2007/04/writing-spelling-corrector-in-plt.html
更新: スペル チェッカーの更新版を書きました。concat マクロは、単純な文字列操作を短くします。
https://github.com/soegaard/this-and-that/blob/master/spell-checker.rkt