All pastes #350027 Raw Edit

Someone

public text v1 · immutable
·published 2007-02-11 05:11 UTC
rendered paste body
tokenize1 (s, token, l(1)) :=
	let
		nextString := ++(s[2 ... size(s)]) when size (s) > 1;
	in
		l ++ [token] when size(s) = 0 else
		tokenize1 (nextString, token ++ s[1], l) when s[1] /= " " else
		tokenize1 (nextString, "", l ++ [token]) when s[1] = " ";

/* Pre-condition: s is a string (possibly empty).
 * Post-condition: returns a list with the strings between the spaces as elements.
 *	- join the list with " ", and you get the original string.
 *
 * pre: String (s) -- would this already be given through the type definition, 
 * assuming we had types in the langauge?
 *	- also note: eiffel uses "require". I think I used that in my quasi-paper
 *	  on the subject.
 *	- String (s) is a generator for strings. 
 *
 * post: list (return) [also given by typing?], join (l, " ") = s
 *
 * Is this pattern reversible? I don't think so - the reverse *is* the join method.
 *	- Can we get the inverse of a pattern from the postcondition?
 */
tokenize (s) := tokenize1 (s, "", []);