reglas - prolog tutorial
Cómo obtener el año del sistema actual en Prolog como un número (1)
Cómo obtener el año actual del sistema como un número en prólogo. Encontré esto. Pero le da al año como una cadena.
today(Today) :- get_time(X), format_time(atom(Today), ''%Y'', X).
Gracias.
Como nota mbratch en los comentarios a mi respuesta, format_time/3
es para mostrar valores de fecha y hora. Si solo necesitara los datos, no usaría format_time/3
, sino más bien stamp_date_time/3
y date_time_value/3
para convertir la marca de tiempo en los valores que necesita. La documentación sobre los predicados relevantes se puede encontrar aquí .
Para obtener el año actual, un predicado como este será suficiente:
year(Year) :-
get_time(Stamp),
stamp_date_time(Stamp, DateTime, local),
date_time_value(year, DateTime, Year).
Aquí hay una descripción de los predicados incorporados que se usan:
-
get_time/2
da un flotante que representa el tiempo transcurrido desde la Época Unix . stamp_date_time/3
convierte el sello en un términodate/9
, de acuerdo con la zona horaria indicada por el tercer argumento. Cuando el argumento de la zona horaria eslocal
, obtiene la zona horaria que su sistema considera local. Un ejemplo dedate/9
:fecha (2014, 3, 29, 8, 8, 59.30211305618286, 21600, ''MDT'', verdadero)
date_time_value/3
: le permite extraer valores de un término dedate/9
(para que no tenga que hacer tonterías comodate(Year,_,_,_,_,_,_,_,_)
para obtener un simple valor).
Su pregunta pregunta por el año, pero su predicado de ejemplo parece que describe la fecha de hoy, que se vería así:
today(Today) :-
get_time(Stamp),
stamp_date_time(Stamp, DateTime, local),
date_time_value(date, DateTime, Today).
La palabra clave date
, date_time_value/3
instanciará Today
a un término date/3
, sosteniendo el año, mes y día: por ejemplo, date(2014, 3, 29)
.
En realidad, es un poco tonto que la biblioteca requiera tres declaraciones para obtener un valor de fecha y hora común, por lo que si maneja fechas y tiempo con frecuencia, es posible que desee usar un predicado de propósito general como
get_date_time_value(Key, Value) :-
get_time(Stamp),
stamp_date_time(Stamp, DateTime, local),
date_time_value(Key, DateTime, Value).
Que devolverá el valor numérico actual correspondiente a la Key
dada:
?- get_date_time_value(day, X).
X = 29.
?- get_date_time_value(year, X).
X = 2014.
?- get_date_time_value(date, X).
X = date(2014, 3, 29).