/*
* This file is part of the X10 project (http://x10-lang.org).
*
* This file is licensed to You under the Eclipse Public License (EPL);
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* (C) Copyright IBM Corporation 2006-2010.
*/
/**
* Some simple examples using a range of Ints for creating functions that
* capture the state (in this case the bounds of the range) of an object
* in order to create the function.
*/
public class IntRange {
private val low: Int;
private var high: Int;
/**
* constructs the range low <= x <= high
* @param low the smallest integer in the range
* @param high the largest integer in the range
*/
public def this(low: Int, high: Int) {
this.low = low; this.high = high;
}
/**
* check whether the argument lies in the range
* @param n any integer
* @return true <==> low <= n <= high
*/
public def includes(n:Int) = low <= n && n <= high;
/**
* returns a function that checks whether an integer is between 0 and 9
* @return a function of one integer argument that checks whether the
* integer is between 0 and 9
*/
public static def isDigitFcn() {
val digit = new IntRange(0,9);
return (n: Int) => digit.includes(n);
}
/**
* returns the function of one integer argument that checks whether
* that argument is in this range.
* @return the function described in the method comment.
*/
public def inMeTester() {
return (n: Int) => low <= n && n <= high;
}
/**
* Checks a couple of examples to see that IntRange works
* @param args: command line arguments, not needed here.
*/
public static def main(args: Array[String](1)): Void {
val isDigit = isDigitFcn();
Console.OUT.println("Is 5 a digit? "+isDigit(5)+". How about 15? "+isDigit(15)+".");
val tester = new IntRange(4, 40).inMeTester();
Console.OUT.println("Is 4 in me? "+tester(4)+". How about 55? "+tester(55)+".");
}
}