он хорошая архитектура системы, если Вы позволяете подключению 1 000 рабочих столов непосредственно к базе данных?
No это, очевидно, не, это - возможно, плохой пример, но я думаю мнение, которое я пытался высказать, ясно, Ваш DBA заботится о Вашей инфраструктуре базы данных, которая это, были их экспертные знания, наполнение SQL в коде блокирует дверь им и их экспертным знаниям.
Он представляет импликацию . Правая часть выполняется только в том случае, если левая часть истинна. Таким образом, если у вас есть этот код,
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.
Это локальная версия разреза, см., Например, раздел о предполагаемом управлении в руководстве по 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.
Поэтому это называется локальным разрезом.
Можно избежать его использования, написав что-нибудь более многословное. Если я перепишу предикат Стефана :
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)
. Но у меня сейчас нет интерпретатора Пролога, чтобы проверить.