Как я нахожу все решения цели в Прологе?

Интервал Java составляет 32 бита, в то время как длинными составляют 64 бита, поэтому когда необходимо представить целые числа, больше, чем 2^31, долго друг. Для типичного примера использования длинных см. System.currentTimeMillis ()

, байт А составляет 8 битов, и самый маленький адресуемый объект на самых современных аппаратных средствах, таким образом, это необходимо при чтении двоичных данных из файла.

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

короткий А составляет два байта, 16 битов. По-моему, это - наименее необходимый тип данных, и я действительно не видел, что в фактическом коде, но снова, это могло бы быть полезно для чтения форматов двоичного файла или выполнения низкоуровневых сетевых протоколов. Например, IP номера портов составляют 16 битов.

Символ представляет отдельный символ, который составляет 16 битов. Это - тот же размер как короткое, но короткое подписывается (-32768 к 32 767), в то время как символ не подписан (от 0 до 65 535). (Это означает, что IP номер порта, вероятно, более правильно представлен как символ, чем короткое, но это, кажется, вне намеченного объема для символов...)

Для действительно authorative источник на этих деталях, se спецификация языка .

Java

14
задан false 23 November 2013 в 20:46
поделиться

1 ответ

Используйте findall , чтобы выполнить это:

P2(ARGUMENTS, LIST) :- findall(X, P1(ARGUMENTS, X), LIST).

Это связано с функцией bagof , упомянутой в вопросе , на который указал Андерс Линдал. Есть хорошее объяснение взаимосвязи между двумя функциями (и третьей функцией setof ) здесь :

Чтобы проиллюстрировать различия, рассмотрим небольшой пример:

 листинг (р).

п (1,3,5).
п (2,4,1).
п (3,5,2).
р (4,3,1).
п (5,2,4).

Попробуйте следующие цели. (Ответ дисплеи были изменены для сохранения пробел.)

? - bagof (Z, p (X, Y, Z), Bag).
Z = _G182 X = 1 Y = 3 Сумка = [5];
Z = _G182 X = 2 Y = 4 Сумка = [1];
Z = _G182 X = 3 Y = 5 Сумка = [2];
Z = _G182 X = 4 Y = 3 Сумка = [1];
Z = _G182 X = 5 Y = 2 Сумка = [4];
Нет

? - findall (Z, p (X, Y, Z), Сумка).
Z = _G182 X = _G180 Y = _G181 Сумка = [5, 1, 2, 1, 4];
Нет

? - bagof (Z, X ^ Y ^ p (X, Y, Z), Сумка).
Z = _G182 X = _G180 Y = _G181 Сумка = [5, 1, 2, 1, 4];
Нет

? - множество (Z, X ^ Y ^ p (X, Y, Z), Bag).
Z = _G182 X = _G180 Y = _G181 Сумка = [1, 2, 4, 5];
Нет

Предикаты bagof и setof дают коллекции для индивидуальных переплетов свободные переменные в цели. набор дает отсортированную версию сборник без дубликатов. Чтобы избегайте привязки переменных, используйте выражение экзистенциального квантора. За пример цели bagof (Z, X ^ Y ^ p (X, Y, Z), Bag) просит "Сумка с Z такая, что существует X и существует Y такой, что p (X, Y, Z) ". findall действует как bagof со всеми свободными переменными автоматически экзистенциально количественно. К тому же findall возвращает пустой список [] там не является достижением цели, тогда как bagof не работает.

17
ответ дан 1 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

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