Exactly - scripts are pure functions. Reasoning behind this is explained by Satoshi himself at Bitcoin Talk [0]. Contracts page at Bitcoin wiki has an example of defining a will using Bitcoin and an oracle [1].
Yup. The concept of a blockchain is fundamentally incompatible with external inputs. That's because at any given moment you need two things:
- everyone to agree that the new block is valid (and you can't really do that if blocks contained functions that had to be verified with external/changeable outputs)
- everyone has to agree that all the past blocks were valid, which is even harder, because if blocks referenced external outputs, the sites/sources they relied on may have changed
That's why not only Bitcoin, but also Ethereum and all the other blockchain-based currencies need oracles for passing external inputs in.
By the way, here's our repo, if anyone's interested in the whole concept: https://github.com/orisi/orisi -- there are tutorials there explaining how to set up an example oracle, and an example client sending stuff to oracles to sign.
There's also one of the core devs explaining this stuff: gavintech.blogspot.com/2014/06/bit-thereum.html
[0] https://bitcointalk.org/index.php?topic=195.msg1611#msg1611
[1] https://en.bitcoin.it/wiki/Contracts#Example_4:_Using_extern...