我有这个代码使用一个上限变量N,它应该终止为毕达哥拉斯三元组的X和Y. 然而它只有在达到上限时才会冻结.不知道如何使用切割来阻止回溯.代码是:
is_int(0).
is_int(X) :- is_int(Y), X is Y+1.
minus(S,S,0).
minus(S,D1,D2) :- S>0, S1 is S-1, minus(S1,D1,D3), D2 is D3+1.
pythag(X,Y,Z,N) :- int_triple(X,Y,Z,N), Z*Z =:= X*X + Y*Y.
int_triple(X,Y,Z,N) :- is_int(S), minus(S,X,S1), X>0, X<N,
minus(S1,Y,Z), Y>0, Y<N.
Run Code Online (Sandbox Code Playgroud)
将被称为,例如,
?- pythag(X,Y,Z,20).
Run Code Online (Sandbox Code Playgroud) 我有以下方法删除数据库,但我得到一个语法错误,我不知道发生了什么.
public void deleteDB(){
try{
Statement s = conn.createStatement();
System.out.println("Deleteting database...");
s.execute("DROP DATABASE Courses");
System.out.println("Database deleted.");
}
catch(SQLException error){
System.err.println("Unable to delete database.");
error.printStackTrace(System.err);
System.exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
我用以下方法调用该方法:
UpdateDB update = new UpdateDB();
update.connectDatabase(dbName);
update.deleteDB();
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
java.sql.SQLSyntaxErrorException: Syntax error: Encountered "DATABASE" at line 1, column 6.
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我有许多不同的对象,包括一个ArrayList中Log,Frog,Turtle,Rock等我想执行一些动作只适用于实现和接口的类的类型,IAction.
Java中是否有内置功能可以做到这一点?我的尝试:
for(Object o : objectList){
if(o.getClass instanceof IAction){ // doesnt work
// doWork
}
}
Run Code Online (Sandbox Code Playgroud)