Как реализовать `forall` (математику) на процедурном или оо-языке

Хорошие объяснения, почему вы не можете делать то, что вы пытаетесь сделать уже предоставленным. В качестве решения можно подумать:

public class foo
{
    static class priceInfo
    {
        public double lastPrice = 0;
        public double price = 0;
        public Price priceObject = new Price ();
    }

    public static void main ( String args[] )
    {

        int period = 2000;
        int delay = 2000;

        final priceInfo pi = new priceInfo ();
        Timer timer = new Timer ();

        timer.scheduleAtFixedRate ( new TimerTask ()
        {
            public void run ()
            {
                pi.price = pi.priceObject.getNextPrice ( pi.lastPrice );
                System.out.println ();
                pi.lastPrice = pi.price;

            }
        }, delay, period );
    }
}

Похоже, что вы могли бы сделать лучший дизайн, чем это, но идея состоит в том, что вы можете группировать обновленные переменные внутри ссылки класса, которая не изменяется.

2
задан Lance Pollard 1 March 2019 в 06:49
поделиться

1 ответ

Если мне позволят рассуждать в Smalltalk, где блоки являются объектами класса BlockClosure, я бы предположил, что вы представляете свойство , которое вы хотите количественно определить как блок p. [ 1121]

Для простоты предположим, что свойство зависит от одного параметра x. Тогда p(x) будет соответствовать выражению Smalltalk

p value: x

, которое оценивает блок p, используя аргумент x.

Таким образом, вы можете реализовать метод Smalltalk forAll: в классе BlockClosure как:

forAll: aCollection
  aCollection do: [:x | (self value: x) ifFalse: [^false]].
  ^true

, который проверяет, что свойство p, представленное блоком получателя, оценивается как true ] для всех элементов в aCollection (вашей вселенной).

Если ваша вселенная не меняется (обычный случай в контексте проблемы), и какие изменения это свойство, вы можете определить класс Universe, который будет содержать коллекцию элементов в своей переменной экземпляра [ 1115]. Затем вы можете реализовать в Universe

forAll: aProperty
  ^aProperty forAll: contents

, где внутреннее сообщение forAll: - это сообщение, реализованное в BlockClosure.

0
ответ дан Leandro Caniglia 1 March 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: