basename
Location: lib, 13 Lines
; Scheme 9 from Empty Space, Function Library ; By Nils M Holm, 2010 ; Placed in the Public Domain ; ; (basename string) ==> string ; (basename string string2) ==> string ; ; Return the rightmost component of the Unix path name given in ; STRING. When STRING2 is given also remove a STRING2 suffix ; (if any) from STRING. ; ; Example: (basename "/foo/bar/baz") ==> "baz" ; (basename "/goo/bar.Z" ".Z") ==> "bar" (load-from-library "string-split.scm") (define (basename path . suffix) (let ((base (car (reverse! (string-split #\/ path))))) (if (null? suffix) base (let ((k (string-length base)) (ks (string-length (car suffix)))) (if (and (> k ks) (string=? (car suffix) (substring base (- k ks) k))) (substring base 0 (- k ks)) base)))))