1+ """
2+ $(TYPEDEF)
3+ $(TYPEDFIELDS)
4+
5+ This is the most basic rule for choosing the next item in a CAT. It simply
6+ picks a random item from the set of items that have not yet been
7+ administered.
8+ """
9+ @kwdef struct PiecewiseNextItemRule{BreaksT, RulesT} <: NextItemRule
10+ # Tuple of Ints
11+ breaks:: BreaksT
12+ # Types of NextItemRules
13+ rules:: RulesT
14+ end
15+
16+ # tuple_len(::NTuple{N, Any}) where {N} = Val{N}()
17+
18+ function current_rule (rule:: PiecewiseNextItemRule , responses:: TrackedResponses )
19+ for brk in 1 : length (rule. breaks)
20+ if length (responses) < rule. breaks[brk]
21+ return rule. rules[brk]
22+ end
23+ end
24+ return rule. rules[end ]
25+ end
26+
27+ function best_item (rule:: PiecewiseNextItemRule , responses:: TrackedResponses , items)
28+ return best_item (current_rule (rule, responses), responses, items)
29+ end
30+
31+ function compute_criteria (rule:: PiecewiseNextItemRule , responses:: TrackedResponses )
32+ return compute_criteria (current_rule (rule, responses), responses)
33+ end
34+
35+ """
36+ """
37+ @kwdef struct MemoryNextItemRule{MemoryT} <: NextItemRule
38+ item_idxs:: MemoryT
39+ end
40+
41+ function best_item (rule:: MemoryNextItemRule , responses:: TrackedResponses , _items)
42+ return rule. item_idxs[length (responses) + 1 ]
43+ # XXX : A few problems with this:
44+ # 1. Could run out of `item_idxs`
45+ # 2. Could return an item not in `items`
46+ # TODO : Add some basic error checking -- can only panic
47+ end
48+
49+ function FixedFirstItemNextItemRule (item_idx:: Int , rule:: NextItemRule )
50+ PiecewiseNextItemRule ((1 ,), (MemoryNextItemRule ((item_idx,)), rule))
51+ end
0 commit comments