我嘗試使用host_ip
爲主機分配IP地址。但我希望所定義的任何IP地址都應該滿足一些先決條件。首先,地址八位組不應該超過有效範圍,其次我只需要來自A類網絡10.0.0.0/8的地址。只有前提條件爲真時,如何定義規則?
我試圖用assertz
但預計它不工作:
byte(X) :- integer(X), X >= 0, X =< 255.
ip(A, B, C, D) :- byte(A), byte(B), byte(C), byte(D).
valid_ip(A, B, C, D) :-
ip(A, B, C, D),
A = 10.
add_host(Name, A, B, C, D) :-
valid_ip(A, B, C, D),
assertz(host_ip(Name, A, B, C, D)).
add_host(host1, 10, 0, 0, 1).
add_host(host2, 11, 0, 0, 1).
規則valid_ip
按預期工作:
?- valid_ip(1,2,3,4).
false.
?- valid_ip(10,2,3,4).
true.
?- valid_ip(1000,2,3,4).
false.
但我無法查詢的host1
IP地址。
?- host_ip(host1, X).
ERROR: toplevel: Undefined procedure: host_ip/2 (DWIM could not correct goal)
我的assertz
用法有什麼問題?