小编sda*_*das的帖子

如何编写不模仿函数实现的QuickCheck测试?

我正在使用Haskell和QuickCheck为以下函数编写测试:

{-| Given a list of points and a direction, find the point furthest
along in that direction. -}

fn :: (Eq a, Ord a, DotProd a) => [a] -> a -> a
fn pnts dir = pnts !! index
    where index = fromJust $ elemIndex (maximum dotproducts) dotproducts
          dotproducts = map (dot dir) pnts
Run Code Online (Sandbox Code Playgroud)

我相信这个实现是正确的,因为它不是太复杂的功能.但是,我想使用QuickCheck来测试一些边缘情况.

但是,我遇到的问题是,当我定义我的QuickCheck测试时,它们与我正在测试的功能相同.

如何在QuickCheck中编写一个测试功能目的而不重复实现的测试?

testing haskell unit-testing quickcheck

10
推荐指数
1
解决办法
794
查看次数

在Java中使用Observer和Observable的模型是不是很糟糕?

这个问题与MVC(模型 - 视图 - 控制器)有关.我的模型当前使用Java中的Observer/Observable模式更改了我的View:

public class Model extends Observable {
}

public class View implements Observer {

    @Override
    public void update(observable o, Object obj) {
        // ... update the view using the model.
    }

}
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,我的模型变得越来越复杂 - 它开始保持其他类的列表:

public class Model extends Observable {
    List<Person> people = new ArrayList<Person>();
}

public class Person {
    private String name = "";
    // ... getter / setter for name
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:当一个人的名字发生变化时,我想更新一个包含该人的模型的视图.我能想到的唯一方法是让Model实现一个Observer类,让Person扩展一个Observable类.然后,当Person改变时,他会通知他的观察者(包括父模型).

然而,如果我的模型变得复杂,这似乎很多工作.是否有更好的方法可以对父模型进行"冒泡"更改?

java model-view-controller

9
推荐指数
1
解决办法
1588
查看次数

如何在Haskell中建模继承?

我正在尝试创建一个由几种不同类型组成的游戏引擎:

data Camera = Camera ...
data Light = SpotLight ... | DirectionalLight ...
data Object = Monster ... | Player ... | NPC ...
Run Code Online (Sandbox Code Playgroud)

但是,我现在正在尝试为所有这些实体实现基本物理.这要求它们各自包含a pos :: (Double, Double, Double)和a velocity :: (Double, Double, Double).

在面向对象的语言中,我将它实现为:

Camera implements PhysicalObject
Run Code Online (Sandbox Code Playgroud)

其中PhysicalObject包含两个属性posvelocity.

我的直接反应是将它们全部放在同一类型中:

data Object = Monster ... | Player ... | NPC ... | Camera ...
Run Code Online (Sandbox Code Playgroud)

然而,我担心这可能会使得实现特定于摄像机的功能,特定于灯光的功能等变得困难.实际上,除了它们在世界上都具有物理位置和速度这一事实之外,它们几乎没有其他共同点. .

有没有比在每个类型构造函数中定义两个属性更简单的方法?

haskell interface

9
推荐指数
2
解决办法
841
查看次数

确定句子是英语的概率的相对简单的方法是什么?

我有许多字符串(字符集合)代表不同语言的句子,例如:

你好,我的名字是乔治.

Das brot ist gut.

...等

我想分配每个分数(从0 ... 1),表明它们是英语句子的可能性.是否有可接受的算法(或Python库)来执行此操作?

注意:我不在乎英语句子的语法是否完美.

python string nlp bayesian

8
推荐指数
2
解决办法
1162
查看次数

我应该在Android文件夹中放置一个可绘制的形状?

我有一个.xml表示形状和5个drawable-***文件夹的文件(对于hdpi,ldp,mdpi,xhdpi,xxhdpi).

由于这是一个形状,我假设我只需要一个副本?我应该创建一个名为drawable的文件夹并将其放在那里吗?或者我是否需要每个分辨率特定文件夹中的一个形状副本?

android

8
推荐指数
1
解决办法
3198
查看次数

如何在Python中比较2D列表的相等性?

给出两个列表:

a = [[1,2],[3,4]]
b = [[1,2],[3,4]]
Run Code Online (Sandbox Code Playgroud)

我怎么写compare这样的:

compare(a,b) => true
Run Code Online (Sandbox Code Playgroud)

python arrays list

8
推荐指数
1
解决办法
1万
查看次数

如何将Numpy数组切割到边界?

我在一个项目中使用Numpy和Python,其中2D地图由以下表示ndarray:

map = [[1,2,3,4,5],
       [2,3,4,2,3],
       [2,2,2,1,2],
       [3,2,1,2,3],
       [4,6,5,7,4]]
MAP_WIDTH = 5, MAP_HEIGHT = 5
Run Code Online (Sandbox Code Playgroud)

一个对象有一个元组位置:

actor.location = (3,3)
Run Code Online (Sandbox Code Playgroud)

和视图范围:

actor.range = 2
Run Code Online (Sandbox Code Playgroud)

如何编写函数actor.view_map(map),以便地图返回演员位置周围的区域,直到范围.例如(使用上面的地图),

range = 1
location = (3, 2)
=>
[[2,3,4],
 [3,4,2],
 [2,2,1]]
Run Code Online (Sandbox Code Playgroud)

但如果演员的范围延伸得太远,我希望地图填充-1:

range = 1
location = (1,1)
[[-1,-1,-1],
 [-1, 1, 2],
 [-1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)

最简单的情况是0的范围,它返回当前的方块:

range = 0
location = (1, 2)
[[2]]
Run Code Online (Sandbox Code Playgroud)

如何将地图切割到某个边界?

python numpy

8
推荐指数
1
解决办法
1053
查看次数

对一组实体进行编程有哪些相关的AI技术?

具体来说,我正在谈论本次比赛的编程:http://www.nodewar.com/about

比赛涉及到你在二维世界中与其他团队一起拥有一群宇宙飞船.船只受到边界的约束(如果它们退出它们死亡),它们必须不断地避开卫星(他们用重力拉动船只).目标是杀死对方女王.

我试图编写一些相对基本的技术,但我觉得我错过了一些基本的东西.

例如,我实现了一些boids行为(http://www.red3d.com/cwr/boids/),但它们似乎缺少...目标,可以这么说.

对于这种游戏,是否有任何常用技术(或者,最好是技术组合)?

编辑

我想以赏金再次打开这个,因为我觉得我仍然缺少重要的信息.以下是我的NodeWar代码:

boundary_field = (o, position) ->
  distance = (o.game.moon_field - o.lib.vec.len(o.lib.vec.diff(position, o.game.center)))
  return distance

moon_field = (o, position) ->
  return o.lib.vec.len(o.lib.vec.diff(position, o.moons[0].pos))

ai.step = (o) ->
  torque = 0;
  thrust = 0;
  label = null;

  fields = [boundary_field, moon_field]

  # Total the potential fields and determine a target.
  target = [0, 0]
  score = -1000000
  step = 1
  square = 1

  for x in [(-square + o.me.pos[0])..(square + o.me.pos[0])] …
Run Code Online (Sandbox Code Playgroud)

artificial-intelligence machine-learning

8
推荐指数
1
解决办法
373
查看次数

是否有可能将类似Lisp的宏构建为命令式语言?

什么阻止像C这样的语言使用Lisp宏?在编译过程中的什么时候,C放弃了操纵其代码树的能力?

而且,这是一个特别是解释与编译的问题吗?

c lisp compiler-construction macros language-design

8
推荐指数
1
解决办法
752
查看次数

(类型)安全地检索向量的元素

我正在尝试编写一个函数

getColumn :: Int -> Vector n e -> e
Run Code Online (Sandbox Code Playgroud)

从大小的向量中检索第i个项目n.

这些向量定义如下:

data Natural where
  Zero :: Natural
  Succ :: Natural -> Natural

type One   = Succ Zero
type Two   = Succ One
type Three = Succ Two
type Four  = Succ Three

data Vector n e where
  Nil  :: Vector Zero e
  (:|) :: e -> Vector n e -> Vector (Succ n) e

infixr :|
Run Code Online (Sandbox Code Playgroud)

是否有某种方法来编写getColumn函数,如果编译器的大小Int太大,编译器将拒绝代码Vector

我该怎么写这个函数?

haskell

8
推荐指数
1
解决办法
196
查看次数