fork(1) download
  1. 'お題:今日は第何曜日か計算して現在の日時を以下のように出力する
  2. 2021/06/09/第2水曜日/19:21/
  3.  
  4. ヒント
  5. 今日の日にちを7で割る 例:9 / 7
  6. 少数点以下は切り捨て
  7. 1を足す
  8. カレンダーを見ながら計算すると分かりやすい' :-
  9. 現在の日時(_年,_月,_日,_時,_分),
  10. 今日は第何曜日か計算して(date(_年,_月,_日),_第何曜日),
  11. '現在の日時を以下のように出力する
  12. 2021/06/09/第2水曜日/19:21/'(_年,_月,_日,_時,_分,_第何曜日).
  13.  
  14. 現在の日時(_年,_月,_日,_時,_分) :-
  15. get_time(_タイムスタンプ),
  16. stamp_date_time(_タイムスタンプ,date(_年,_月,_日,_時,_分,_,_,_,_),local).
  17.  
  18. 今日は第何曜日か計算して(_今日,_第何曜日) :-
  19. day_of_the_week(_今日,_曜日番号),
  20. 曜日番号(_曜日,_曜日番号),
  21. 第何曜日(_今日,_曜日,_第何曜日).
  22.  
  23. '現在の日時を以下のように出力する
  24. 2021/06/09/第2水曜日/19:21/'(_年,_月,_日,_時,_分,_第何曜日) :-
  25. '月,日,時,分をヘッドゼロサプライの2桁の文字列とする'(_月,_日,_時,_分,_月_2,_日_2,_時_2,_分_2),
  26. writef('%w/%w/%w/%w/%w:%w/\n',[_年,_月_2,_日_2,_第何曜日,_時_2,_分_2]).
  27.  
  28. 曜日(_年,_月,_日,_曜日) :-
  29. day_of_the_week(date(_年,_月,_日),_曜日番号),
  30. 曜日番号(_曜日,_曜日番号).
  31.  
  32. 曜日番号(月曜,1).
  33. 曜日番号(火曜,2).
  34. 曜日番号(水曜,3).
  35. 曜日番号(木曜,4).
  36. 曜日番号(金曜,5).
  37. 曜日番号(土曜,6).
  38. 曜日番号(日曜,7).
  39.  
  40. 第何曜日(date(_,_,_日),_曜日,_第何曜日) :-
  41. _第何 is _日 // 7 + 1,
  42. atomic_list_concat([,_第何,_曜日],_第何曜日).
  43.  
  44. '月,日,時,分をヘッドゼロサプライの2桁の文字列とする'(_月,_日,_時,_分,_月_2,_日_2,_時_2,_分_2) :-
  45. maplist(ヘッドゼロサプライの2桁の文字列とするヘッドゼロサプライの2桁の文字列とする,[_月,_日,_時,_分],[_月_2,_日_2,_時_2,_分_2]).
  46.  
  47. ヘッドゼロサプライの2桁の文字列とするヘッドゼロサプライの2桁の文字列とする(N,A) :-
  48. N < 10,
  49. atom_concat('0',N,A),!.
  50. ヘッドゼロサプライの2桁の文字列とするヘッドゼロサプライの2桁の文字列とする(N,A) :-
  51. atom_number(A,N).
  52.  
  53. program :-
  54. 'お題:今日は第何曜日か計算して現在の日時を以下のように出力する
  55. 2021/06/09/第2水曜日/19:21/
  56.  
  57. ヒント
  58. 今日の日にちを7で割る 例:9 / 7
  59. 少数点以下は切り捨て
  60. 1を足す
  61. カレンダーを見ながら計算すると分かりやすい'.
  62.  
Success #stdin #stdout #stderr 0.03s 6836KB
stdin
Standard input is empty
stdout
2021/06/10/第2木曜/00:26/
stderr
% halt