我无法弄清楚为什么m1显然被记忆,而m2不在下面:
m1 = ((filter odd [1..]) !!)
m2 n = ((filter odd [1..]) !! n)
Run Code Online (Sandbox Code Playgroud)
m1 10000000在第一次调用时大约需要1.5秒,而后续调用需要一小部分(大概是缓存列表),而m2 10000000总是花费相同的时间(每次调用重建列表).知道发生了什么事吗?关于GHC是否以及何时会记忆功能,是否有任何经验法则?谢谢.
就像背景一样,我知道Fisher-Yates完美的洗牌.它的O(n)复杂性和保证的一致性是一个很好的混乱,我不会使用它...在一个允许就地更新数组的环境中(所以在大多数情况下,如果不是全部,命令式编程环境).
可悲的是,函数式编程世界并没有让你访问可变状态.
然而,由于Fisher-Yates,我没有很多关于如何设计改组算法的文献.完全解决这个问题的几个地方之前做了这么简单的说法,实际上,"所以这里是Fisher-Yates,这是你需要知道的所有洗牌".最后,我必须提出自己的解决方案.
我想出的解决方案是这样的,可以随机播放任何数据列表:
在Erlang代码中,它看起来像这样:
shuffle([]) -> [];
shuffle([L]) -> [L];
shuffle(L) ->
{Left, Right} = lists:partition(fun(_) ->
random:uniform() < 0.5
end, L),
shuffle(Left) ++ shuffle(Right).
Run Code Online (Sandbox Code Playgroud)
(如果这看起来像是一种疯狂的快速排序,那么,基本上就是这就是它.)
所以这就是我的问题:同样的情况使得找到非Fisher-Yates 的改组算法变得困难,这使得找到分析混洗算法的工具同样困难.在分析PRNG的均匀性,周期性等方面,我可以找到很多文献,但没有关于如何分析洗牌的大量信息.(事实上,我在分析shuffle时发现的一些信息是完全错误的 - 很容易通过简单的技术欺骗.)
所以我的问题是:我如何分析我的改组算法(假设那里的random:uniform()调用可以生成具有良好特性的适当随机数)?我可以使用哪些数学工具来判断,在1 ... 100的整数列表中,是否有100,000次洗牌运行给了我合理的改组结果?我已经做了一些我自己的测试(例如,比较增量到shuffles中的减量),但我想知道更多.
如果对该混洗算法本身有任何了解,也会受到重视.
这真的很奇怪.
当我使用标准ArrayAdapter进行ListView调用时,setItemChecked工作正常
但是当使用定制的ArrayAdapter时却没有.
那是什么原因?这是一个错误吗?或者我错过了什么?
public class Test_Activity extends Activity {
/** Called when the activity is first created. */
private List<Model> list;
private ListView lView;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// Create an array of Strings, that will be put to our ListActivity
setContentView(R.layout.main);
lView = (ListView) findViewById(R.id.ListView01);
lView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
list = getModel();
//with this adapter setItemChecked works OK
lView.setAdapter(new ArrayAdapter<Model>(this,
android.R.layout.simple_list_item_multiple_choice, list));
//**************************
//PROBLEM: with this adapter it does not check any items on the screen
// ArrayAdapter<Model> adapter …Run Code Online (Sandbox Code Playgroud) 所以我有我的MainDisplayActivity两个Activity和LoaderManager.LoaderCallbacks<Cursor>.在这里,我有一个A ListView,我填写了我使用ContentProvider从我的数据库获得的议程信息.我也有GridView一个日历.我点击一个单元格时设置了它,在点击的那一天更新议程.我的问题是,当重用我在onCreate()setOnItemClickListener()内部创建的Loader时,它不会使用我正在创建的新游标刷新信息.我可以用另一个ID创建一个新的Loader,它可以运行一次,但是一旦我点击另一天,它就会停止刷新.问题在于光标.如何从Loader刷新游标,这样我就不必继续创建新的Loader?提前致谢!
初始调用在My MainDisplayActivity类中的onCreate()中创建Loader :
makeProviderBundle(new String[] {"_id, event_name, start_date, start_time, end_date, end_time, location"},
"date(?) >= start_date and date(?) <= end_date", new String[]{getChosenDate(), getChosenDate()}, null);
getLoaderManager().initLoader(0, myBundle, MainDisplayActivity.this);
list.setAdapter(agendaAdapter);
Run Code Online (Sandbox Code Playgroud)
这些是被重写的方法 LoaderCallbacks<Cursor>
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Uri baseUri = SmartCalProvider.CONTENT_URI;
return new CursorLoader(this, baseUri, args.getStringArray("projection"),
args.getString("selection"), args.getStringArray("selectionArgs"), args.getBoolean("sortOrder") ? args.getString("sortOrder") : null );
}
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
agendaAdapter.swapCursor(arg1);
}
@Override …Run Code Online (Sandbox Code Playgroud) debugging android android-contentprovider android-loadermanager android-cursorloader
我希望通过Django了解有关您的测试流程的更多信息.
背景资料 http://docs.djangoproject.com/en/dev/topics/testing/
我在使用测试驱动开发时遇到了困难.Django的测试运行器在启动时不断在测试数据库中创建所有数据库模型.对于我们当前的项目(40到240个型号),这意味着测试开始需要20秒.
这使得经常测试新功能完全不可行.我的问题,你们是如何解决这个问题的呢?
我在过去尝试了一些事情.) - 每次更改testloader以重用相同的测试数据库并在需要时应用迁移b.) - 从__main__python文件流中运行我的单元测试
选项b对于sys.path很尴尬,选项a是可行的,但似乎不是django方式.
更新:选项A确实不是一个糟糕的解决方案.它只是相当多的努力.这让我相信人们使用不同的解决方法.SQL lite可能就是那种解决方法.但我猜还有更多.
我能够在我的Android应用程序中创建,编写和读取SQLite数据库.我有一个完全填充数据的数据库副本,我想将这些数据存入App的数据库.是否可以从我的应用程序内部访问我的填充数据库?或者我可以至少创建一个填充数据库的副本,然后使用该副本?或者我是否需要执行.dump并将所有插入内容放入Android代码中?
我在测试目录中测试了Django应用程序:
my_project/apps/my_app/
??? __init__.py
??? tests
? ??? __init__.py
? ??? field_tests.py
? ??? storage_tests.py
??? urls.py
??? utils.py
??? views.py
Run Code Online (Sandbox Code Playgroud)
Django测试运行器要求我将一个suite()函数放在__init__.py我的应用程序的tests目录的文件中.该函数返回当我执行$ python manage.py test时将运行的测试用例
我安装了django-nose.当我尝试使用django-nose运行测试时,运行0测试:
$ python manage.py test <app_name>
Run Code Online (Sandbox Code Playgroud)
如果我直接指向测试模块,则运行测试:
$ python manage.py test my_project.apps.my_app.tests.storage_tests
Run Code Online (Sandbox Code Playgroud)
为什么django-nose的测试跑者没有找到我的测试?我必须做什么?
我正在使用django模板,为了便于阅读,我的html看起来类似于以下内容:
{% if some_variable %}
text
{% else %}
nothing exists here
{% endif %}
{% for item in set %}
{% if forloop.first %}
...etc...
Run Code Online (Sandbox Code Playgroud)
它在运行时转换为以下html,其中包括大量的空格和返回:
text
<div>
<li
class='some_class
>
some text
</li>
</div>
etc...
Run Code Online (Sandbox Code Playgroud)
在查看页面源时,有些页面甚至可以运行~3,000行html.
有没有工具在运行时压缩这个HTML?如何删除额外的换行符?
当我点击第1组时,它会展开并显示子项目.我正在尝试的是点击组1它应该展开,幻灯片动画效果按下组2.类似于再次点击组1应该崩溃,组2应该向上移动滑动效果.我无法找到解决方案.请帮助我提出宝贵的建议.感谢致敬 :)
我正在尝试为Haskell中的固定长度列表定义一个类型.当我使用标准方式将自然数编码为一元中的类型时,一切正常.但是,当我尝试在GHC的类型文字上构建所有内容时,我遇到了大量问题.
我对所需列表类型的第一次拍摄是
data List (n :: Nat) a where
Nil :: List 0 a
(:>) :: a -> List n a -> List (n+1) a
Run Code Online (Sandbox Code Playgroud)
遗憾的是,它不允许使用类型编写zip函数
zip :: List n a -> List n b -> List n (a,b)
Run Code Online (Sandbox Code Playgroud)
我可以通过从类型变量n中的类型变量中减去1来解决这个问题(:>):
data List (n :: Nat) a where
Nil :: List 0 a
(:>) :: a -> List (n-1) a -> List n a -- subtracted 1 from both n's
Run Code Online (Sandbox Code Playgroud)
接下来,我尝试定义一个追加函数:
append :: List n1 a -> …Run Code Online (Sandbox Code Playgroud) android ×4
django ×3
ghc ×2
haskell ×2
python ×2
unit-testing ×2
algorithm ×1
animation ×1
collapse ×1
compression ×1
debugging ×1
django-nose ×1
expand ×1
gzip ×1
html ×1
listview ×1
memoization ×1
nose ×1
shuffle ×1
sqlite ×1