小编Alf*_*dge的帖子

z3:解决八皇后难题

我正在使用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)

python smt z3 z3py

6
推荐指数
1
解决办法
539
查看次数

如何在 Java 中使用访问者模式模拟 Haskell 的模式匹配

我是 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)

java generics haskell

0
推荐指数
1
解决办法
125
查看次数

标签 统计

generics ×1

haskell ×1

java ×1

python ×1

smt ×1

z3 ×1

z3py ×1