[pure-lang-svn] SF.net SVN: pure-lang:[692] pure/trunk
Status: Beta
Brought to you by:
agraef
|
From: <ag...@us...> - 2008-09-03 21:47:46
|
Revision: 692
http://pure-lang.svn.sourceforge.net/pure-lang/?rev=692&view=rev
Author: agraef
Date: 2008-09-03 21:47:54 +0000 (Wed, 03 Sep 2008)
Log Message:
-----------
Arithmetic sequences permit an infinite upper bound now.
Modified Paths:
--------------
pure/trunk/lib/prelude.pure
pure/trunk/test/prelude.log
Modified: pure/trunk/lib/prelude.pure
===================================================================
--- pure/trunk/lib/prelude.pure 2008-09-03 21:20:42 UTC (rev 691)
+++ pure/trunk/lib/prelude.pure 2008-09-03 21:47:54 UTC (rev 692)
@@ -248,9 +248,11 @@
infix 1 .. ;
-n1,n2..m = while (\i->s*i<=s*m) (\x->x+k) n1
+n1,n2..m = if m===s*inf then iterate (\x->x+k) n1
+ else while (\i->s*i<=s*m) (\x->x+k) n1
when k = n2-n1; s = if k>0 then 1 else -1 end if n1!=n2;
-n..m = while (\i->i<=m) (\x->x+1) n;
+n..m = if m===inf then iterate (\x->x+1) n
+ else while (\i->i<=m) (\x->x+1) n;
/* Common list functions. This mostly comes straight from the Q prelude which
in turn was based on the first edition of the Bird/Wadler book, and is very
Modified: pure/trunk/test/prelude.log
===================================================================
--- pure/trunk/test/prelude.log 2008-09-03 21:20:42 UTC (rev 691)
+++ pure/trunk/test/prelude.log 2008-09-03 21:47:54 UTC (rev 692)
@@ -311,7 +311,12 @@
<var> state 2
state 2: #0
} end;
-n1/*0:0101*/,n2/*0:011*/..m/*0:1*/ = while (\i/*0:*/ -> s/*1:*/*i/*0:*/<=s/*1:*/*m/*3:1*/ {
+n1/*0:0101*/,n2/*0:011*/..m/*0:1*/ = if m/*2:1*/===s/*0:*/*(1e+307*1e+307) then iterate (\x/*0:*/ -> x/*0:*/+k/*2:*/ {
+ rule #0: x = x+k
+ state 0: #0
+ <var> state 1
+ state 1: #0
+}) n1/*2:0101*/ else while (\i/*0:*/ -> s/*1:*/*i/*0:*/<=s/*1:*/*m/*3:1*/ {
rule #0: i = s*i<=s*m
state 0: #0
<var> state 1
@@ -332,7 +337,12 @@
<var> state 1
state 1: #0
} end if n1/*0:0101*/!=n2/*0:011*/;
-n/*0:01*/..m/*0:1*/ = while (\i/*0:*/ -> i/*0:*/<=m/*1:1*/ {
+n/*0:01*/..m/*0:1*/ = if m/*0:1*/===1e+307*1e+307 then iterate (\x/*0:*/ -> x/*0:*/+1 {
+ rule #0: x = x+1
+ state 0: #0
+ <var> state 1
+ state 1: #0
+}) n/*0:01*/ else while (\i/*0:*/ -> i/*0:*/<=m/*1:1*/ {
rule #0: i = i<=m
state 0: #0
<var> state 1
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|