<RefEntry id="match-split"> <!-- This file is generated automatically from the DSSSL source. --> <!-- Do not edit this file! --> <?html-filename match-split.html> <RefMeta> <RefEntryTitle>match-split</RefEntryTitle> <RefMiscInfo Role="file">dblib.dsl</RefMiscInfo> </RefMeta> <RefNameDiv> <RefName>match-split</RefName> <RefPurpose>Splits string at target and returns the resulting list of tokens</RefPurpose> </RefNameDiv> <RefSynopsisDiv><Title>Synopsis</Title> <Synopsis> (match-split string target) </Synopsis> </RefSynopsisDiv> <RefSect1><Title>Description</Title> <para> Splits string at every occurance of target and returns the result as a list. Note that <literal>match-split</literal> returns the occurances of <literal>target</literal> in the list of tokens. </para> <variablelist> <varlistentry><term><literal>string</literal></term> <listitem> <para> The string to split. </para> </listitem> </varlistentry> <varlistentry><term><literal>target</literal></term> <listitem> <para> The string which is a delimiter between tokens </para> </listitem> </varlistentry> </variablelist> </RefSect1> <RefSect1><Title>Example</Title> <para> <literal>"this is a test"</literal> split at <literal>"is"</literal> returns <literal>("th" "is" " " "is" " a test")</literal> </para> </RefSect1> <RefSect1><Title>Author</Title> <para> Norman Walsh, <ndw@nwalsh.com> </para> </RefSect1> <RefSect1><Title>Source Code</Title> <ProgramListing> (define (match-split string target) ;; Splits string at target and returns the resulting list of tokens (if (string? string) (let loop ((result '()) (current "") (rest string)) (if (< (string-length rest) (string-length target)) (append result (if (equal? (string-append current rest) "") '() (list (string-append current rest)))) (if (equal? target (substring rest 0 (string-length target))) (loop (append result (if (equal? current "") '() (list current)) (list target)) "" (substring rest (string-length target) (string-length rest))) (loop result (string-append current (substring rest 0 1)) (substring rest 1 (string-length rest)))))) (list string))) </ProgramListing> </RefSect1> </RefEntry>