# Member/2 deterministic how?

**URL:** <https://swi-prolog.discourse.group/t/member-2-deterministic-how/5660>\
**Category:** Help!\
**Created:** [August 6, 2022, 2:20pm UTC](https://swi-prolog.discourse.group/t/member-2-deterministic-how/5660 "2022-08-06T14:20:53Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![brebs](https://avatars.discourse-cdn.com/v4/letter/b/e9c0ed/32.png) [@brebs](https://swi-prolog.discourse.group/u/brebs)\
**Post date:** [August 6, 2022, 2:20pm UTC](https://swi-prolog.discourse.group/t/member-2-deterministic-how/5660/1 "2022-08-06T14:20:53Z")

</div>

For [https://www.reddit.com/r/prolog/comments/wh6w01/clarification\_of\_how\_flashlight\_backtracking\_works/](https://www.reddit.com/r/prolog/comments/wh6w01/clarification_of_how_flashlight_backtracking_works/) I wrote this _unusual_ code:

```prolog
member_flash(Elem, Lst) :-
    bagof(Elem, member(Elem, Lst), Elems),
    member(Elem, Elems).

```

How/why is the following query in swi-prolog 8.4.3 succeeding _without_ a choicepoint? It is of course not using memberchk/2

```prolog
?- member_flash(3, [1,2,3,1,2]).
true.

```

Interactively, the equivalent code _does_ leave a choicepoint:

```prolog
?- Lst = [1,2,3,1,2], bagof(Elem, member(Elem, Lst), Elems), member(3, Elems).
Lst = Elems, Elems = [1,2,3,1,2] ;
false.

```

---

<div class="post-metadata">

**Author:** ![brebs](https://avatars.discourse-cdn.com/v4/letter/b/e9c0ed/32.png) [@brebs](https://swi-prolog.discourse.group/u/brebs)\
**Post date:** [August 6, 2022, 2:29pm UTC](https://swi-prolog.discourse.group/t/member-2-deterministic-how/5660/2 "2022-08-06T14:29:29Z")

</div>

To answer my own question - I was being silly.

The `Elem` in bagof/3 would already be unified with 3, in the predicate. As trace/0 shows.
