我正在使用Z3解决八皇后难题。我知道在这个问题上每个女王可以用一个整数表示。但是,当我用两个整数表示皇后时,如下所示:
from z3 import *
X = [[Int("x_%s_%s" % (i+1, j+1)) for j in range(8)] for i in range(8) ]
cells_c = [Or(X[i][j] == 0, X[i][j] == 1) for i in range(8) for j in range(8) ]
rows_c = [Sum(X[i]) == 1 for i in range(8)]
cols_c = [Sum([X[i][j] for i in range(8)]) == 1 for j in range(8) ]
diagonals_c = [Implies(And(X[i][j] == 1, X[k][h] == 1), abs(k - i) != abs(j - h))
for i in range(8) for …Run Code Online (Sandbox Code Playgroud) 我是 Java 新手,我正在尝试使用访问者模式来模拟模式匹配。对于这个 Haskell 函数
getOrDefault :: Maybe a -> a -> a
getOrDefault (Just x) = const x
getOrDefault Nothing = id
Run Code Online (Sandbox Code Playgroud)
它返回一个类型的值a(给定一个类型的值Maybe a和一个默认值),以下 Java 代码有效。
interface Visitor<T, S> {
S visitJust(Just<T> j);
S visitNothing(Nothing<T> n);
}
abstract class Maybe<T> {
public abstract <S> S accept(Visitor<T, S> v);
public T getOrDefault(T defaultValue) {
return this.accept(new Visitor<T, T>() {
@Override
public T visitJust(Just<T> j) { return j.value; }
@Override
public T visitNothing(Nothing<T> n) { return defaultValue; …Run Code Online (Sandbox Code Playgroud)