01:54
СтарТречное

# j = our generation; i = john's father; k = jane's daughter
male(john). # our protagonist
male(ian).
female(jane).
female(kate).
family(john, jane).
family(ian, kate).
parent(ian, john).
parent(jane, kate).
parent(X, Y) :- family(X, Z), parent(Z, Y).
parent(X, Y) :- family(Z, X), parent(Z, Y).
father(X, Y) :- parent(X, Y), male(X).
grandfather(X, Y) :- father(X, Z), parent(Z, Y).
# and these couples have children
parent(john, keegan).
parent(ian, jake).
## Семейные хитросплетения:
## 1 буква имени, чтоб не запутаться:
#
# J — наше поколение
# I — поколение родителей
# K — поколение детей
male(john). # Несколько лет назад я
female(jane). # встретил молодую вдову
female(kate). # со взрослой дочерью
parent(jane, kate).
family(john, jane). # и мы поженились.
male(ian). # Недавно мой отец
parent(ian, john).
family(ian, kate). # женился на моей падчерице.
parent(ian, jake). # Идем дальше, у дочери моей жены (моей мачехи) родился сын. // ну не сам же собой родился ^^
# на самом деле он тут для совместимости с текстом. в выводе по нашей задаче он роли не играет
parent(john, keegan). # Это было бы еще терпимо, пока у нас с женой не родился сын.
# пол детей роли не играет, поэтому не мусорим в памяти
#
## все в сборе, начианем веселье
#
# супруг(а) родителя тоже родитель!!!
parent(X, Y) :- family(X, Z), parent(Z, Y). # осторожно, если поменять местами, будет бесконечная рекурсия // сам напоролся
parent(X, Y) :- family(Z, X), parent(Z, Y). # на самом деле в задаче не требуется
# отец — это родитель мужского пола.
father(X, Y) :- parent(X, Y), male(X).
# дед — это отец родителя
grandfather(X, Y) :- father(X, Z), parent(Z, Y).
#
## всего три правила, а какая семейная трагедия!
$a = function () {for ($i = 0; $i < 10; $i++) yield $i;};
foreach ($a() as $i) echo $i; // 0123456789
foreach(function () {for ($i = 0; $i < 10; $i++) yield $i;} as $i) echo $i;
foreach((function () {for ($i = 0; $i < 10; $i++) yield $i;})() as $i) echo $i;
foreach((function () {for ($i = 0; $i < 10; $i++) yield $i;})->__invoke() as $i) echo $i;
(0..9).each { |i| print i }
Я регался на Gmail и Google+ когда это не было мейнстримом
— G. Christian Archer
I need to find some food in this terminal. I'm hungry for eternity. — Selene Shepard
use SimplePHPEasyPlus\Number\NumberCollection;
use SimplePHPEasyPlus\Number\SimpleNumber;
use SimplePHPEasyPlus\Number\CollectionItemNumberProxy;
use SimplePHPEasyPlus\Parser\SimpleNumberStringParser;
use SimplePHPEasyPlus\Iterator\CallbackIterator;
use SimplePHPEasyPlus\Operator\AdditionOperator;
use SimplePHPEasyPlus\Operation\ArithmeticOperation;
use SimplePHPEasyPlus\Operation\OperationStream;
use SimplePHPEasyPlus\Engine;
use SimplePHPEasyPlus\Calcul\Calcul;
use SimplePHPEasyPlus\Calcul\CalculRunner;
$numberCollection = new NumberCollection();
$numberParser = new SimpleNumberStringParser();
$firstParsedNumber = $numberParser->parse('1');
$firstNumber = new SimpleNumber($firstParsedNumber);
$firstNumberProxy = new CollectionItemNumberProxy($firstNumber);
$numberCollection->add($firstNumberProxy);
$secondParsedNumber = $numberParser->parse('1');
$secondNumber = new SimpleNumber($secondParsedNumber);
$secondNumberProxy = new CollectionItemNumberProxy($secondNumber);
$numberCollection->add($secondNumberProxy);
$addition = new AdditionOperator('SimplePHPEasyPlus\Number\SimpleNumber');
$operation = new ArithmeticOperation($addition);
$engine = new Engine($operation);
$calcul = new Calcul($engine, $numberCollection);
$runner = new CalculRunner();
$runner->run($calcul);
$result = $calcul->getResult();
$numericResult = $result->getValue(); // 2