Your task is to write a program or function that determines whether a number is divisible by another. The catch is that it should give an answer as soon as possible, even if not all digits of the number have been given.
Your program should take an integer D ≥ 2 and then a series of digits as input. These represent the digits of another integer N ≥ 1, starting at the least significant digit. At the first point that N either must or must not be divisble by D, your program should output the appropriate answer and exit. If the end of the input is reached, it should output whether the full N is divisible by D.
Here is a list of acceptable input formats for N (leave a comment if you think something that isn't included should be allowed):
Standard input: digits are given on separate lines; end of input is EOF or a special value; exit means that the function returns or the program exits.
Analog input: through e.g. keystrokes or ten buttons representing each digit; end of input is a special value; exit means that the function returns or the program exits.
Function with global state: called repeatedly with successive digits; end of input is a special value; exit means that the function returns a non-null value. Note that if you use global state, it must be cleared after a value is returned or otherwise reset such that the function works multiple times.
Curried function: returns either another function to be called with the next digit or a value; end of input is a special value or calling the function with no argument; exit means that the function returns an answer rather than another function.
GUI prompt or similar: displayed repeatedly; end of input is "cancel" or equivalent, or a special value; exit means that prompts stop appearing.
Iterator function: input is a stateful object or function that returns the next digit when called, end of input is an exception or special value; exit means that the iterator stops being called.
Input for D and the output can be through any acceptable standard method.
2; 6 => true 5; 6 => false 20; 0 3 => false 20; 0 4 => true 100; 1 => false 100; 0 0 => true 100; 0 2 => false 4; 2 4 => false 4; 2 5 => true 4; 2 [eof] => false 4; 4 [eof] => true 625; 5 5 => false 625; 5 7 2 => false 625; 5 7 3 6 => false 625; 5 7 3 4 => true 7; 9 3 4 [eof] => false 7; 9 3 4 5 [eof] => true 140; 0 3 => false 140; 0 4 5 [eof] => false 140; 0 4 5 1 [eof] => true 14; 4 5 1 4 [eof] => false 14; 4 5 1 4 1 [eof] => true