Что означает append( A, B, C)
? Это означает
A=[..........]
B=[.........]
C=[...................]
Что означает
length( B, 2)
? Это означает
B = [X | B1 ],
length( B1, 1)
и так, что означает
B = [X | B1 ],
B1 = [Y | B2],
length( B2, 0)
% i.e.
B = [X | B1 ],
B1 = [Y | B2],
B2 = []
% i.e.
B = [X | B1 ],
B1 = [Y | []]
% i.e.
B = [X | [Y | []]] = [X | [Y]]
= [X , Y | [] ]
= [X, Y ]
и так
B = [X, Y], append( A, B, C)
означает
A=[..........]
B=[XY]
C=[..........XY]
Я думаю, что это понятно, что это значит. Это означает, что мы можем определить
one_before_last(C, X) :-
% you can finish this up now!
. И как мы увидели, что B = [_, _]
означает length( B, 2)
(т.е. мы отслеживаем наши уравнения в обратном направлении), мы можем использовать другие вещи в качестве аргументов для length
. Чтобы решить ваши другие заявленные проблемы.
Я использовал бы управление ErrorProvider, возможно с другим значком для представления "требуемый" в противоположность "по ошибке". Я также удостоверился бы, чтобы поля запустились со значка ошибки, показанного рядом с ними, и значок должен только исчезнуть, после того как данные были обеспечены для того поля.
Только выполнение проверки/уведомления недостающих данных, когда пользователь пытается сохранить, кажется слишком поздним.
Желтый фон сделал бы это подобным многим веб-формам. Никакая идея, существуют ли какие-либо стандарты для Windows по сути, хотя, если существуют, я сомневаюсь, что они широко используются.
Используйте errorprovider дополнительное управление.
Это размещает Красный Крест рядом с управлением с сообщением подсказки.
Что-то для рассмотрения - то, какие пользователи приучены к видению обязательных полей. В то время как не графически представление, помещая простую звездочку рядом с обязательным полем является очень повсеместным решением.