我真的无法理解函数与它创建的结果之间的联系。我有以下Haskell代码
0*0
-2
-1
1*-3
-1+-6
-7*1
9*10
10+3
-8+15
2*-3
-13
当我运行“sample genExpr'”
时,它会在控制台中生成以下结果@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
ViewGroup sceneRoot = (ViewGroup)rootView.findViewById(R.id.relative);
final Transition transition = new ChangeBounds();
transition.setDuration(3000);
final Scene scene1 = Scene.getSceneForLayout(sceneRoot, R.layout.scene1, getActivity());
final Scene scene2 = Scene.getSceneForLayout(sceneRoot, R.layout.scene2, getActivity());
ImageView image = (ImageView)rootView.findViewById(R.id.image);
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!testBoo){
TransitionManager.go(scene2, transition);
testBoo = true;
} else {
testBoo = false;
TransitionManager.go(scene1, transition);
}
}
});
return rootView;
}
是什么让结果总共为11?
答案 0 :(得分:4)
[就上下文而言,我假设您的意思是Gen
库中定义的QuickCheck
。]
您所看到的输出与sample
的输出与您编写的生成器的关系一样多。
sample
的定义是:
-- | Generates some example values and prints them to 'stdout'.
sample :: Show a => Gen a -> IO ()
sample g =
do cases <- sample' g
mapM_ print cases
-- | Generates some example values.
sample' :: Gen a -> IO [a]
sample' g =
generate (sequence [ resize n g | n <- [0,2..20] ])
所以sample
接受一个生成器,在其上运行辅助函数sample'
,然后在屏幕上打印sample'
的所有结果。
函数sample
使用生成器,并使用generate
来&#34;调用&#34;它使用resize
进行了多次不同的大小。列表理解确定了多少次。列表推导使用输入大小[0,2..20]
,这是一个扩展到11个元素的列表。这就是为什么你最终会看到11个结果。
因此,您最终会看到使用您的生成器生成的11个随机值。