无法理解结果与功能之间的联系

时间:2015-10-16 07:53:15

标签: haskell

我真的无法理解函数与它创建的结果之间的联系。我有以下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?

1 个答案:

答案 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个随机值。