delorie.com/archives/browse.cgi   search  
Mail Archives: geda-user/2015/09/12/11:38:45

X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f
X-Recipient: geda-user AT delorie DOT com
Date: Sat, 12 Sep 2015 17:37:46 +0200 (CEST)
From: Roland Lutz <rlutz AT hedmen DOT org>
To: "Vladimir Zhbanov (vzhbanov AT gmail DOT com) [via geda-user AT delorie DOT com]" <geda-user AT delorie DOT com>
Subject: Re: [geda-user] About reinventing the wheel, and how to avoid it
In-Reply-To: <20150911214120.GB7946@localhost.localdomain>
Message-ID: <alpine.DEB.2.00.1509121720120.2554@lichen>
References: <alpine DOT DEB DOT 2 DOT 00 DOT 1509111150410 DOT 2482 AT lichen> <20150911214120 DOT GB7946 AT localhost DOT localdomain>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
MIME-Version: 1.0
Reply-To: geda-user AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: geda-user AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

On Sat, 12 Sep 2015, Vladimir Zhbanov (vzhbanov AT gmail DOT com) [via geda-user AT delorie DOT com] wrote:
> On Fri, Sep 11, 2015 at 04:06:36PM +0200, Roland Lutz wrote:
>> [C code]
>
> And that's an impenetrable code for the same in Guile:
>
>  (use-modules (geda page))
>
>  ; Checks if the OBJECT is a circle or an arc with zero radius
>  (define (zero-radius-object? object)
>    (or
>      (and (circle? object) (= (circle-radius object) 0))
>      (and (arc?    object) (= (arc-radius    object) 0))))
>
>  (apply page-remove! (active-page)
>         (filter
>           zero-radius-object?
>           (page-contents (active-page))))

Or, assuming a similar syntax that preserves the information needed to 
optimize the request:

     (delete-selected-objects! (active-page)
                               (select-by-radius (active-page) 0))

> Just about reinvention of the wheel. :-/

The point here isn't C vs. Scheme.  The point is iterating over all 
objects vs. passing a structured request to the library.  My example is in 
C because the libxornstorage interface is in C, and that's because it's 
generally a good idea to have a library interface in C unless there is 
good reason to do otherwise.

I don't seriously expect anyone (except maybe hardcore C fans) to use the 
C interface directly (though I tried hard to make it as well-usable as 
possible).  I'm not even using it directly myself except for the test 
cases.  The intended use case is to write language bindings for some 
high-level language--in my case, it was Python, it may be Scheme for 
you--and use that language from then on.

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019