[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: RE: Declarative programming requires a different mindset

  • From: David <dlee@calldei.com>
  • To: xml-dev@lists.xml.org
  • Date: Thu, 25 Mar 2010 07:58:36 -0400

Re:  RE: Declarative programming requires a different mindset
To me (and please explain why I'm wrong)
Saying that Declarative Programming languages dont "tell the computer what to do" is misleading, or outright false.
Even in languages like XQuery and XSLT ... There's few constructs that dont have some sense of operational instructions.
The literal element constructor in XQuery may come close where you simply enter what you want the output to be
    <XML>something</XML>

But everything else, such as variable declarations, FLOWR expresions, recursion etc have some mannor of 'telling the computer what to do'.
Just not in as direct way as procedural/imperative programming.

Your example is a good one.  Your giving a "recipe" or "instructions" on 'how to do'  the substring-before-last ... operation.
Is this "purely declarative' ?   I dont know.
Does it matter ?

IMHO ... actual declarative languages like XQuery and XSLT (those are the ones I'm most familiar with) you still have to give the computer
directions on 'what to do' and quite a bit of 'how to do it'.   Just not quite so much on the 'how' part as imperative languages.
But I dont see it as quite black & white.   To me it seems somewhat fuzzy.

I'm not sure how one might express, purely declarative , a new operation built out of existing atoms without some kind of direction on how to get there from here.   Even purely 'rule based' languages still have the assumption that rules will be "evaluated" ...
Maybe there is some strict dividing line ... I'm not sure what it is.

For anything complex, In languages I know, you have to somehow give enough direction to the system to tell it how to do it.
How else ?  How would you write substring-before-last without giving directions on how to accomplish it or what it meant ?
Purely by example ? Inductive programming? But that may be really really difficult to make sure the examples you gave were good enough to express what you really mean.

Am I totally missing the boat here ?








-------------------------
David A. Lee
dlee@calldei.com
http://www.calldei.com
http://www.xmlsh.org

On 3/25/2010 7:32 AM, Costello, Roger L. wrote:
82B6502D-2598-489F-BA47-FB33D572D800@mimectl" type="cite">

Hi Folks,

 

Yesterday’s responses were outstanding and illuminating. Thank you.

 

I learned that a declarative program describes the relationship of the output to the input.

 

This raises new questions. Let’s take an example. Suppose that this is the input:

 

<XML-file>http://www.example.org/book.xml</XML-file>

 

I want the output to contain the URL and the filename separated:

 

<XML-file>

    <URL>http://www.example.org/</URL>

    <Filename>book.xml</Filename>

</XML-file>

 

This XSLT code describes the relationship of the output to the input:

 

<xsl:template match="XML-file">

    <xsl:variable name="url"

                  select="f:substring-before-last(., '/')" />

    <XML-file>

        <URL>

            <xsl:value-of select="$url" />

        </URL>

        <Filename>

            <xsl:value-of select="substring-after(., $url)" />

        </Filename>

    </XML-file>

</xsl:template>

 

I believe this code is declarative. Do you agree?

 

Note my use of the function, f:substring-before-last(). There is no such built-in function, I created it. Below is how I implemented it. The implementation doesn’t seem descriptive. It seems quite recipe-like:

 

   Get the substring before $delimiter and output it,

   then output $delimiter, and then recurse.

 

It seems quite imperative. Do you agree?

 

If I stuff a bunch of imperative code into functions, and the “main” code is declarative, do I still have a declarative program?

 

Here’s my implementation of f:substring-before-last():

 

<xsl:function name="f:substring-before-last" as="xs:string?">

    <xsl:param name="string" as="xs:string" />

    <xsl:param name="delimiter" as="xs:string" />

       

    <xsl:if test="contains( $string, $delimiter )">

        <xsl:variable name="url">

            <xsl:value-of

               select="substring-before( $string, $delimiter )"/>

            <xsl:value-of select="$delimiter"/>

            <xsl:value-of

               select="f:substring-before-last(substring-after

                        ( $string, $delimiter ), $delimiter)" />

        </xsl:variable>

        <xsl:value-of select="$url" />

    </xsl:if>         

</xsl:function>

 

/Roger


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.