Что-> оператор в Прологе и как я могу использовать его?

он хорошая архитектура системы, если Вы позволяете подключению 1 000 рабочих столов непосредственно к базе данных?

No это, очевидно, не, это - возможно, плохой пример, но я думаю мнение, которое я пытался высказать, ясно, Ваш DBA заботится о Вашей инфраструктуре базы данных, которая это, были их экспертные знания, наполнение SQL в коде блокирует дверь им и их экспертным знаниям.

9
задан Mateusz Piotrowski 2 June 2018 в 20:54
поделиться

3 ответа

Он представляет импликацию . Правая часть выполняется только в том случае, если левая часть истинна. Таким образом, если у вас есть этот код,

implication(X) :-
  (X = a ->
    write('Argument a received.'), nl
  ; X = b ->
    write('Argument b received.'), nl
  ;
    write('Received unknown argument.'), nl
  ).

Тогда он будет писать разные вещи в зависимости от его аргумента:

?- implication(a).
Argument a received.
true.

?- implication(b).
Argument b received.
true.

?- implication(c).
Received unknown argument.
true.

( ссылка на документацию .)

8
ответ дан 4 December 2019 в 19:34
поделиться

Это локальная версия разреза, см., Например, раздел о предполагаемом управлении в руководстве по SWI.

Он в основном используется для реализации if-then- иначе по (условие -> истинная ветвь; ложная ветка). Как только условие выполнено успешно, возврат из истинной ветви обратно в условие или ложную ветвь не происходит, но возврат из if-then-else все еще возможен:

?- member(X,[1,2,3]), (X=1 -> Y=a ; X=2 -> Y=b ; Y=c).
X = 1,
Y = a ;
X = 2,
Y = b ;
X = 3,
Y = c.

?- member(X,[1,2,3]), (X=1, !, Y=a ; X=2 -> Y=b ; Y=c).
X = 1,
Y = a.

Поэтому это называется локальным разрезом.

3
ответ дан 4 December 2019 в 19:34
поделиться

Можно избежать его использования, написав что-нибудь более многословное. Если я перепишу предикат Стефана :

implication(X) :-
  (
    X = a,
    write('Argument a received.'), nl
  ; 
    X = b,
    write('Argument b received.'), nl
  ;
    X \= a,
    X \= b,
    write('Received unknown argument.'), nl
  ).

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

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

ETA: Я не уверен, что это полностью эквивалентно версии Стефана, из-за возврата если у вас есть импликация (X) . Но у меня сейчас нет интерпретатора Пролога, чтобы проверить.

1
ответ дан 4 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

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