<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//TaxonX//DTD Taxonomic Treatment Publishing DTD v0 20100105//EN" "../../nlm/tax-treatment-NS0.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:tp="http://www.plazi.org/taxpub" article-type="research-article" dtd-version="3.0" xml:lang="en">
  <front>
    <journal-meta>
      <journal-id journal-id-type="publisher-id">109</journal-id>
      <journal-id journal-id-type="index">urn:lsid:arphahub.com:pub:3dc5f44e-8666-58db-bc76-a455210e8891</journal-id>
      <journal-title-group>
        <journal-title xml:lang="en">JUCS - Journal of Universal Computer Science</journal-title>
        <abbrev-journal-title xml:lang="en">jucs</abbrev-journal-title>
      </journal-title-group>
      <issn pub-type="ppub">0948-695X</issn>
      <issn pub-type="epub">0948-6968</issn>
      <publisher>
        <publisher-name>Journal of Universal Computer Science</publisher-name>
      </publisher>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.3217/jucs-012-07-0828</article-id>
      <article-id pub-id-type="publisher-id">28635</article-id>
      <article-categories>
        <subj-group subj-group-type="heading">
          <subject>Research Article</subject>
        </subj-group>
        <subj-group subj-group-type="scientific_subject">
          <subject>D.1.1 - Applicative (Functional) Programming</subject>
          <subject>I.2.2 - Automatic Programming</subject>
          <subject>I.2.4 - Knowledge Representation Formalisms and Methods</subject>
        </subj-group>
      </article-categories>
      <title-group>
        <article-title>Program Slicing by Calculation</article-title>
      </title-group>
      <contrib-group content-type="authors">
        <contrib contrib-type="author" corresp="yes">
          <name name-style="western">
            <surname>Rodrigues</surname>
            <given-names>Nuno F.</given-names>
          </name>
          <email xlink:type="simple">nfr@di.uminho.pt</email>
          <xref ref-type="aff" rid="A1">1</xref>
        </contrib>
        <contrib contrib-type="author" corresp="no">
          <name name-style="western">
            <surname>Barbosa</surname>
            <given-names>Luís Soares</given-names>
          </name>
          <xref ref-type="aff" rid="A1">1</xref>
        </contrib>
      </contrib-group>
      <aff id="A1">
        <label>1</label>
        <addr-line content-type="verbatim">Universidade do Minho, , Portugal</addr-line>
        <institution>Universidade do Minho</institution>
        <country>Portugal</country>
      </aff>
      <author-notes>
        <fn fn-type="corresp">
          <p>Corresponding author: Nuno F. Rodrigues (<email xlink:type="simple">nfr@di.uminho.pt</email>).</p>
        </fn>
        <fn fn-type="edited-by">
          <p>Academic editor: </p>
        </fn>
      </author-notes>
      <pub-date pub-type="collection">
        <year>2006</year>
      </pub-date>
      <pub-date pub-type="epub">
        <day>28</day>
        <month>07</month>
        <year>2006</year>
      </pub-date>
      <volume>12</volume>
      <issue>7</issue>
      <fpage>828</fpage>
      <lpage>848</lpage>
      <uri content-type="arpha" xlink:href="http://openbiodiv.net/1CD5DB5D-A5CF-5E0B-878E-23D5B7639A99">1CD5DB5D-A5CF-5E0B-878E-23D5B7639A99</uri>
      <uri content-type="zenodo_dep_id" xlink:href="https://zenodo.org/record/6997058">6997058</uri>
      <permissions>
        <copyright-statement>Nuno F. Rodrigues, Luís Soares Barbosa</copyright-statement>
        <license license-type="creative-commons-attribution" xlink:href="" xlink:type="simple">
          <license-p>This article is freely available under the J.UCS Open Content License.</license-p>
        </license>
      </permissions>
      <abstract>
        <label>Abstract</label>
        <p>Program slicing is a well known family of techniques used to identify code fragments which depend on or are depended upon specific program entities. They are particularly useful in the areas of reverse engineering, program understanding, testing and software maintenance. Most slicing methods, usually oriented towards the imperative or object paradigms, are based on some sort of graph structure representing program dependencies. Slicing techniques amount, therefore, to (sophisticated) graph transversal algorithms. This paper proposes a completely different approach to the slicing problem for functional programs. Instead of extracting program information to build an underlying dependencies' structure, we resort to standard program calculation strategies, based on the so-called Bird-Meertens formalism. The slicing criterion is specified either as a projection or a hiding function which, once composed with the original program, leads to the identification of the intended slice. Going through a number of examples, the paper suggests this approach may be an interesting, even if not completely general, alternative to slicing functional programs.</p>
      </abstract>
    </article-meta>
  </front>
</article>
