chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Chicken-users] Re: photo album in chicken


From: Kon Lovett
Subject: Re: [Chicken-users] Re: photo album in chicken
Date: Sun, 30 Apr 2006 10:58:55 -0700

On Apr 30, 2006, at 9:44 AM, Reed Sheridan wrote:


From: "Ashish Shrestha" <address@hidden >
Subject: [Chicken-users] photo album in chicken
To: address@hidden
Message-ID:
        < address@hidden>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed

<snip>

Also, here is a more schemely and more compact normalise-path function:

(define (rps-normalise-path path)
  (let loop ((reverse-parts (reverse (string-split path "/")))
         (skip 0)
         (acc '()))
    (match reverse-parts
      (() (string-join acc "/"))
      (("." . more) (loop more skip acc))
      ((".." . more) (loop more (add1 skip) acc))
      ((path-part . more)
         (if (zero? skip)
             (loop more 0 (cons path-part acc))
             (loop more (sub1 skip) acc))))))

This version handles paths with "../../", but drops the leading "/" from absolute paths (so did yours).


Prefer your over my offering. (Would just stripping the current-directory elements be useful separately? Thought it might be so broke it out for later top-level define, but ...)

(define (pathname-normalize path)
  (let loop ([parts (reverse! (string-split path "/"))] [skip 0] [acc '()])
    (match parts
      (() (string-join (or (and (absolute-pathname? path) (cons "" acc)) acc) "/"))
      (("." . more) (loop more skip acc))
      ((".." . more) (loop more (add1 skip) acc))
      ((path-part . more)
         (if (zero? skip)
(loop more 0 (cons path-part acc))
(loop more (sub1 skip) acc))))))

Best Wishes,
Kon


reply via email to

[Prev in Thread] Current Thread [Next in Thread]