'お題：今日は第何曜日か計算して現在の日時を以下のように出力する
2021/06/09/第2水曜日/19:21/

ヒント
今日の日にちを7で割る　例：9 / 7
少数点以下は切り捨て
１を足す
カレンダーを見ながら計算すると分かりやすい' :-
現在の日時(_年,_月,_日,_時,_分),
今日は第何曜日か計算して(date(_年,_月,_日),_第何曜日),
'現在の日時を以下のように出力する
2021/06/09/第2水曜日/19:21/'(_年,_月,_日,_時,_分,_第何曜日).

現在の日時(_年,_月,_日,_時,_分) :-
get_time(_タイムスタンプ),
stamp_date_time(_タイムスタンプ,date(_年,_月,_日,_時,_分,_,_,_,_),local).

今日は第何曜日か計算して(_今日,_第何曜日) :-
day_of_the_week(_今日,_曜日番号),
曜日番号(_曜日,_曜日番号),
第何曜日(_今日,_曜日,_第何曜日).

'現在の日時を以下のように出力する
2021/06/09/第2水曜日/19:21/'(_年,_月,_日,_時,_分,_第何曜日) :-
'月,日,時,分をヘッドゼロサプライの2桁の文字列とする'(_月,_日,_時,_分,_月_2,_日_2,_時_2,_分_2),
writef('%w/%w/%w/%w/%w:%w/\n',[_年,_月_2,_日_2,_第何曜日,_時_2,_分_2]).

曜日(_年,_月,_日,_曜日) :-
day_of_the_week(date(_年,_月,_日),_曜日番号),
曜日番号(_曜日,_曜日番号).

曜日番号(月曜,1).
曜日番号(火曜,2).
曜日番号(水曜,3).
曜日番号(木曜,4).
曜日番号(金曜,5).
曜日番号(土曜,6).
曜日番号(日曜,7).

第何曜日(date(_,_,_日),_曜日,_第何曜日) :-
_第何 is _日 // 7 + 1,
atomic_list_concat([第,_第何,_曜日],_第何曜日).

'月,日,時,分をヘッドゼロサプライの2桁の文字列とする'(_月,_日,_時,_分,_月_2,_日_2,_時_2,_分_2) :-
maplist(ヘッドゼロサプライの2桁の文字列とするヘッドゼロサプライの2桁の文字列とする,[_月,_日,_時,_分],[_月_2,_日_2,_時_2,_分_2]).

ヘッドゼロサプライの2桁の文字列とするヘッドゼロサプライの2桁の文字列とする(N,A) :-
N < 10,
atom_concat('0',N,A),!.
ヘッドゼロサプライの2桁の文字列とするヘッドゼロサプライの2桁の文字列とする(N,A) :-
atom_number(A,N).

program :-
'お題：今日は第何曜日か計算して現在の日時を以下のように出力する
2021/06/09/第2水曜日/19:21/

ヒント
今日の日にちを7で割る　例：9 / 7
少数点以下は切り捨て
１を足す
カレンダーを見ながら計算すると分かりやすい'.
