<malval kind="function" name=">="/>
<malval kind="function" name="read-string"/>
<malval kind="function" name="slurp"/>
- <malval kind="function" name="env??"/> <!-- defined in the step files -->
<malval kind="function" name="eval"/> <!-- defined in the step files -->
<malval kind="function" name="atom"/> <!-- defined in the step files -->
<malval kind="function" name="atom?"/>
<malval kind="function" name="deref"/> <!-- defined in the step files -->
<malval kind="function" name="swap!"/> <!-- defined in the step files -->
<malval kind="function" name="reset!"/> <!-- defined in the step files -->
+ <malval kind="function" name="cons"/>
+ <malval kind="function" name="concat"/>
+ <malval kind="function" name="nth"/>
+ <malval kind="function" name="first"/>
+ <malval kind="function" name="rest"/>
</xsl:sequence>
</xsl:function>
<xsl:when test="$func/malval/@name = 'atom?'">
<xsl:sequence select="core:makeMALType((), if ($args/value/malval/lvalue/malval[1]/@kind = 'atom') then 'true' else 'false')"/>
</xsl:when>
+ <xsl:when test="$func/malval/@name = 'cons'">
+ <xsl:variable name="result">
+ <value>
+ <malval kind="list">
+ <lvalue>
+ <xsl:sequence select="$args/value/malval/lvalue/malval[1]"/>
+ <xsl:sequence select="$args/value/malval/lvalue/malval[2]/lvalue/malval" />
+ </lvalue>
+ </malval>
+ </value>
+ </xsl:variable>
+ <xsl:sequence select="$result"/>
+ </xsl:when>
+ <xsl:when test="$func/malval/@name = 'concat'">
+ <xsl:variable name="result">
+ <value>
+ <malval kind="list">
+ <lvalue>
+ <xsl:sequence select="$args/value/malval/lvalue/malval/lvalue/malval"/>
+ </lvalue>
+ </malval>
+ </value>
+ </xsl:variable>
+ <xsl:sequence select="$result"/>
+ </xsl:when>
+ <xsl:when test="$func/malval/@name = 'nth'">
+ <value>
+ <xsl:variable name="res" select="$args/value/malval/lvalue/malval[1]/lvalue/malval[position() = (number($args/value/malval/lvalue/malval[2]/@value) + 1)]"/>
+ <xsl:if test="empty($res)">
+ <xsl:message terminate="yes">
+ <xsl:sequence select="'Index out of bounds'"/>
+ </xsl:message>
+ </xsl:if>
+ <xsl:sequence select="$res"/>
+ </value>
+ </xsl:when>
+ <xsl:when test="$func/malval/@name = 'first'">
+ <value>
+ <xsl:variable name="res" select="$args/value/malval/lvalue/malval[1]/lvalue/malval[1]"/>
+ <xsl:choose>
+ <xsl:when test="empty($res)">
+ <malval kind="nil" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:sequence select="$res"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </value>
+ </xsl:when>
+ <xsl:when test="$func/malval/@name = 'rest'">
+ <value>
+ <malval kind="list">
+ <lvalue>
+ <xsl:sequence select="$args/value/malval/lvalue/malval[1]/lvalue/malval[position() > 1]"/>
+ </lvalue>
+ </malval>
+ </value>
+ </xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">Invalid function <xsl:sequence select="$func"/> </xsl:message>
</xsl:otherwise>