[Bug 25445] [XP3.1] Replace curly array constructor with a function

https://www.w3.org/Bugs/Public/show_bug.cgi?id=25445

--- Comment #4 from Jonathan Robie <jonathan.robie@gmail.com> ---
Here is a set of examples from the use cases in three different syntaxes:

** XQuery 3.1 CWD

The syntax in the current working draft.

** Changing array { } to array(())

Michael's proposal in comment 0 of this BZ. To my eyes, these
expressions are harder to read because of the number of parentheses.

** Changing array { } to [], changing [] to array()

A counterproposal that allows us to replace one of our array
constructor syntaxes with array() rather than array(())

Here are some examples from the use cases.

Note: 

  I did not find an example that depends on the comma behavior
  we have defined for the current [] operator, so I will try to
  construct such an example in a subsequent comment.

* Example 1:

** XQuery 3.1 CWD

declare function local:spellcheck($languages, $text)
{
  map:new (
     { "languages" : $languages },
     { "raw" : $text  },
     for $l in $languages
     return map {
       $l : array { $text ! ext:sc($l, .) }
     }
  )
};

** Changing array { } to array(())

declare function local:spellcheck($languages, $text)
{
  map:new (
     { "languages" : $languages },
     { "raw" : $text  },
     for $l in $languages
     return map {
       $l : array (( $text ! ext:sc($l, .) ))
     }
  )
};

** Changing array { } to [], changing [] to array()

declare function local:spellcheck($languages, $text)
{
  map:new (
     { "languages" : $languages },
     { "raw" : $text  },
     for $l in $languages
     return map {
       $l : array [ $text ! ext:sc($l, .) ]
     }
  )
};


* Example 2:

** XQuery 3.1 CWD

[
  for $w in $s()
  return array { "pos" : $w(2), "lemma" : $w(1) }
]

** Changing array { } to array(())

[
  for $w in $s()
  return array (( "pos" : $w(2), "lemma" : $w(1) ))
]

** Changing array { } to [], changing [] to array()

[
  for $w in $s()
  return [ "pos" : $w(2), "lemma" : $w(1) ]
]

* Example 3:

** XQuery 3.1 CWD

  map {
    true() : array { $s[$p(.)] },
    false() : array { $s[not($p(.))] }
  }

** Changing array { } to array(())

  map {
    true() : array (( $s[$p(.)] )),
    false() : array (( $s[not($p(.))] ))
  }


** Changing array { } to [], changing [] to array()

  map {
    true() : [ $s[$p(.)] ],
    false() : [ $s[not($p(.))] ]
  }


* Example 4:

** XQuery 3.1 CWD

declare function local:mult( $matrix1, $matix2 )
{
  if (length($matrix1) != length($matrix2(1))
  then error("Matrices must be m*n and n*p to multiply!")
  else array {
     for $i in 1 to length($matrix1)
     return array {
         for $j in 1 to length($matrix2(1))
         return
            sum (
               for $k in 1 to length($matrix2)
               return $matrix1($i)($k) * $matrix2($k)($j)
            )
     }
  }
};


** Changing array { } to array(())

declare function local:mult( $matrix1, $matix2 )
{
  if (length($matrix1) != length($matrix2(1))
  then error("Matrices must be m*n and n*p to multiply!")
  else array ((
     for $i in 1 to length($matrix1)
     return array ((
         for $j in 1 to length($matrix2(1))
         return
            sum (
               for $k in 1 to length($matrix2)
               return $matrix1($i)($k) * $matrix2($k)($j)
            )
     ))
  ))
};

** Changing array { } to [], changing [] to array()

declare function local:mult( $matrix1, $matix2 )
{
  if (length($matrix1) != length($matrix2(1))
  then error("Matrices must be m*n and n*p to multiply!")
  else [
     for $i in 1 to length($matrix1)
     return [
         for $j in 1 to length($matrix2(1))
         return
            sum (
               for $k in 1 to length($matrix2)
               return $matrix1($i)($k) * $matrix2($k)($j)
            )
     ]
  ]
};

* Example 5: assign items to groups

Note: We don't have really good use cases in our document for this. 
      I don't consider this one strong, but it illustrates the syntax.

** XQuery 3.1 WD

let $x := (1, 2, 3, 4, 5, 6, 7, 8, 9)
return  [$x[. mod 2 eq 0], $x[. mod 3 eq 0], $x[. mod 5 eq 0]]

** Changing array { } to array(())

(Same as above.)

let $x := (1, 2, 3, 4, 5, 6, 7, 8, 9)
return  [$x[. mod 2 eq 0], $x[. mod 3 eq 0], $x[. mod 5 eq 0]]

** Changing array { } to [], changing [] to array()

let $x := (1, 2, 3, 4, 5, 6, 7, 8, 9)
return  array( $x[. mod 2 eq 0], $x[. mod 3 eq 0], $x[. mod 5 eq 0])

-- 
You are receiving this mail because:
You are the QA Contact for the bug.

Received on Sunday, 27 July 2014 20:17:57 UTC