Memoize |
BasicWerk
EC Support
Technique
Facebook
|
20140613111929_factor_regexp_fry_tri |
factor_regexp_fry_tri
以前作った re-replace-first をカリー化(fry)と tri を使って分かりやすくしてみた。
最初のバージョン http://basicwerk.com/memoize/20140610123934_factor_regexp.html
SYMBOL を使ったバージョン http://basicwerk.com/memoize/20140611161945_factor_SYMBOLS.html
3 番目の NEW が今回のバージョンである。 ! Copyright (C) 2014 Shin Nakamura. ! See http://factorcode.org/license.txn for BSD license. USING: kernel locals math regexp regexp.private sequences.private accessors sequences lexer parser words words.symbol namespaces fry ; IN: my-regexp ! OLD : re-replace-first% ( string regexp replacement -- result ) rot rot over rot rot first-match dup tuple? [ dup from>> over to>> rot drop rot replace-slice ] [ drop nip ] if ; ! OLD2 : re-replace-first%% ( string regexp replacement -- result ) SYMBOLS: str re rep ; rep set re set str set str get re get first-match dup tuple? [ rep get swap dup from>> swap to>> str get replace-slice ] [ drop str get ] if ; ! NEW : re-replace-first ( string regexp replacement -- result ) '[ _ dup _ _ ] call ! dup str, for "else" ! -> str str re rep '[ _ _ first-match _ ] call ! -> str Tuple|f rep '[ _ dup tuple? _ swap ] call ! -> str Tuple|f rep bool ! "if" eats bool [ swap ! -> str rep Tuple [ from>> ] [ to>> ] [ seq>> ] tri ! -> str rep(new) from to str(seq) replace-slice ! -> str result nip ! -> result ] [ ! str f rep 2drop ! -> str ] if ;
|
© Shin Nakamura/BasicWerk 2014 |