Comment detail

n日後を返す関数を返す関数 (Nested Flatten)
クロージャとか無いので、適当な名前を付けて述語を定義するしかないです。多分。
呼び出すときはcall/nを使います。
1
2
3
n_days_later(N,Pred):-gensym(temprary_predicate_,Pred),H=..[Pred,D,R],B=(R is D + N * 86400),P=..[:-,H,B],assert(P).

:-get_time(T),n_days_later(10,Pred),call(Pred,T,R),convert_time(R,Rs),writeln(Rs).
call(foo(A), B) は call(foo, A, B) と同じなので assart/1 を使わずに以下のように書けると思います。
1
2
n_days_later_pred(N, T, R) :- R is T + N * 86400.
n_days_later(N, n_days_later_pred(N)).

Index

Feed

Other

Link

Pathtraq

loading...