100までの整数から素数を列挙せよ(XSL編)


<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="primes.xsl" ?>
<max>100</max>

下の枠内では、上記のようなXMLファイル(primes.xml)をiframeで読み込んでいます。

primes.xmlで指定しているXSL (primes.xsl)は以下の通りです。

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 version="1.0" xmlns="http://www.w3.org/1999/xhtml">

<xsl:template match="/">
<p>
  <xsl:text>2, 3</xsl:text>
  <xsl:call-template name="primes">
    <xsl:with-param name="x" select="5" />
    <xsl:with-param name="max" select="max" />
  </xsl:call-template>
</p>
</xsl:template>

<xsl:template name="primes">
  <xsl:param name="x" />
  <xsl:param name="max" />
  <xsl:if test="$x &lt; $max">
    <xsl:call-template name="primeQ">
      <xsl:with-param name="x" select="$x" />
      <xsl:with-param name="check" select="3" />
    </xsl:call-template>
    <xsl:call-template name="primes">
      <xsl:with-param name="x" select="$x + 2" />
      <xsl:with-param name="max" select="$max" />
    </xsl:call-template>
  </xsl:if>
</xsl:template>

<xsl:template name="primeQ">
  <xsl:param name="x" />
  <xsl:param name="check" />
  <xsl:if test="$check = $x">
    <xsl:text>, </xsl:text><xsl:value-of select="$x" />
  </xsl:if>
  <xsl:if test="$check &lt; $x">
    <xsl:if test="($x mod $check) != 0">
      <xsl:call-template name="primeQ">
        <xsl:with-param name="x" select="$x" />
        <xsl:with-param name="check" select="$check + 2" />
      </xsl:call-template>
    </xsl:if>
  </xsl:if>
</xsl:template>

</xsl:stylesheet>

これがLLかどうかはわかりませんが、ドキュメントにそのまま挿入できるので便利です(嘘)。

キミならどう書く 2.0 – ROUND 1 –