1
我對prolog中錯誤恢復的機制有點不熟悉,所以如果問題看起來很愚蠢,我很抱歉。 我正在尋找一種在swi-prolog中正確處理SocketError的方法。到目前爲止,我只找到下面的代碼片段:在Prolog中處理SocketError
setup_call_catcher_cleanup(tcp_socket(Socket),
tcp_connect(Socket, Host:Port),
exception(_),
tcp_close_socket(Socket)).
每當連接被拒絕,它會引發相應的異常並進行清理行動,關閉套接字。
問題是,我想將此嵌入到謂詞test_socket/3
中,該謂詞在連接被拒絕時設置狀態碼,我似乎無法找到一種方法。我試着做:
test_socket(Host, Port, Status) :-
setup_call_catcher_cleanup(tcp_socket(Socket),
tcp_connect(Socket, Host:Port),
exception(_),
(tcp_close_socket(Socket), Status = 1).
但這似乎並沒有伎倆。有任何想法嗎?
參數'清理'的目的是執行一些清理操作,然後繼續,就好像這個清理沒有發生。也就是說,例外情況進一步惡化,'Status = 1'是多餘的。構造不是爲了做所有事情。但是,可能最重要的是「catch/3」,就是你想要的。 – false
謝謝!你的建議是我需要的。 – VHarisop
...和:大多數時候使用了'setup_call_cleanup/3',帶有'catcher'的版本是用於調試的。 – false