我希望将用户生日作为输入并打入部分。像年,月,日。 怎么做。请帮我。我不知道该怎么做。
提前致谢。
答案 0 :(得分:2)
这是另一种选择,但我必须说我更喜欢Grzegorz指出的方法:
?- read_line_to_codes(user_input,L), phrase((integer(Y),"-",integer(M),"-",integer(D)),L).
|: 2012-12-22
L = [50, 48, 49, 50, 45, 49, 50, 45, 50|...],
Y = 2012,
M = 12,
D = 22.
你必须包括'合适的图书馆......
?- [library(dcg/basics)].
答案 1 :(得分:1)
让用户输入日期作为字符串并使用parse_time/2
和stamp_date_time/3
:
示例:
?- parse_time('2012-05-05 12:56:33', Stamp),
stamp_date_time(Stamp, DateTime, 'UTC'),
DateTime = date(Year, Month, Day, Hour, Minute, Seconds, _, _, _).
Stamp = 1336222593.0,
DateTime = date(2012, 5, 5, 12, 56, 33.0, 0, 'UTC', -),
Year = 2012,
Month = Day, Day = 5,
Hour = 12,
Minute = 56,
Seconds = 33.0.
用户无需输入完整的日期和时间。年,月和日足以让parse_time / 2工作。还有其他谓词来操纵日期和时间。请参阅此处的SWI-Prolog文档:Time and date predicates
<强>更新强>
go :-
write('Please enter your birthday [YYYY-MM-DD]'), nl,
read_string(Birthday),
parse_time(Birthday, Stamp),
stamp_date_time(Stamp, DateTime, 'UTC'),
DateTime = date(Year, Month, Day, _, _, _, _, _, _),
print('Year: '), print(Year), nl,
print('Month: '), print(Month), nl,
print('Day: '), print(Day), nl.
read_string(String) :-
current_input(Input),
read_line_to_codes(Input, Codes),
string_codes(String, Codes).
示例输入和输出:
?- go.
Please enter your birthday [YYYY-MM-DD]
|: 1985-01-09
Year: 1985
Month: 1
Day: 9
true.