我想写一个prolog程序,告诉我密码是否符合以下规则:
我该怎么做?那之后我该如何“提问”呢? (Q1:这个密码是否正确?Q2:它足够长吗?)
提前感谢您的回答。这非常重要,我真的很感激。
答案 0 :(得分:1)
好吧,我会选择类似的东西,但使用DCG或其他东西可能有更好的解决方案:
contains_letter(Password) :- wildcard_match('*[a-zA-Z]*', Password).
contains_number(Password) :- wildcard_match('*[0-9]*', Password).
contains_double_letter(Password) :-
(between(65, 90, Letter) ; between(97, 122, Letter)),
append([_, [Letter, Letter], _], Password),
!.
starts_with_letter(Password) :- wildcard_match('[a-zA-Z]*', Password).
long_enough(Password) :-
length(Password, Length),
Length >= 6.
check_everything(Password) :-
contains_letter(Password),
contains_number(Password),
contains_double_letter(Password),
starts_with_letter(Password),
long_enough(Password).
用法是:
?- check_everything("password_to_test").
或只是其中一个标准:
?- long_enough("password_to_test").
请注意,它使用的是swi-pl谓词wildcard_match/2
,我不知道它是否在其他实现中可用。
我希望这可以提供一些帮助!
请注意,contains_letter/1
,contains_number/1
和starts_with_letter/1
都可以合并为一个wildcard_match/2
btw:
starts_with_letter_has_number(Password) :-
wildcard_match('[a-zA-Z]*[0-9]*', Password).