tutorial reglas listas inteligencia explicados ejercicios ejemplos comandos artificial prolog swi-prolog

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érmino date/9 , de acuerdo con la zona horaria indicada por el tercer argumento. Cuando el argumento de la zona horaria es local , obtiene la zona horaria que su sistema considera local. Un ejemplo de date/9 :

    fecha (2014, 3, 29, 8, 8, 59.30211305618286, 21600, ''MDT'', verdadero)

  • date_time_value/3 : le permite extraer valores de un término de date/9 (para que no tenga que hacer tonterías como date(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).