* Move
* == s.New-State
Move { sM eS = >; }
Функция Try будет трансформировать состояние. Если перемещение невозможно в данном состояниия, то новое, фиктивное, состояние будет представляться символом Imposs. Admiss будет проверять, что результирующее состояние удовлетворяет необходимым требованиям. Если это так, функция оставит состояние неизменным. Если же требования не удовлетворяются, она заменит состояние на Imposs . Вот как выглядит простое и прямолинейное определение Try, которое использует средства сопоставления с образцом языка РЕФАЛ и изобилует комментариями:
* Try a move
Try {
* Boat on left bank
* MM crossing
1 L('MM'e1)(e2) = R(e1)('MM'e2);
* CC crossing
2 L(e1'CC')(e2) = R(e1)(e2'CC');
* MC crossing
3 L(e1'MC'e2)(e3) = R(e1 e2)('M'e3'C');
* M crossing
Достарыңызбен бөлісу: |