aboutsummaryrefslogtreecommitdiff
path: root/org-drill.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-27 21:40:43 -0500
committerCraig Jennings <c@cjennings.net>2026-05-27 21:40:43 -0500
commita2a7471f88a8c0f5c710d5ffb90511fc54b432d7 (patch)
treeff48348c21808986e5d196a68246781329c6dda8 /org-drill.el
parent6e3f2d278d9598c6838428ee510445f51888bb30 (diff)
downloadorg-drill-a2a7471f88a8c0f5c710d5ffb90511fc54b432d7.tar.gz
org-drill-a2a7471f88a8c0f5c710d5ffb90511fc54b432d7.zip
refactor: take card-state in org-drill-determine-next-interval-sm5
Stage 4 of #147. sm5 now takes (state quality of-matrix &optional delta-days) instead of nine positional args, binding the recall fields from the struct at the top so the algorithm body is unchanged. Both call-site branches pass the state they already hold, dropping the per-branch accessor unpacking. The testutil adapter test-scheduler--call-sm5 keeps the sm5 test calls a one-symbol rename per site. I also kept the return as the existing list, matching the stage-3 refinement: the goal is reducing the input signature, and changing the return shape would force the shared return-extractors and every return-read to change for no real gain. Also folds in two stage-3 follow-ons I missed when sm2 landed: a direct sm5 call in tests/test-org-drill-small-branch-coverage.el now uses the new struct API inline, and five direct sm2 calls in the simple-workflow integration test now go through the testutil adapter (the integration file picks up the testutil-scheduler require). Caught by running make test-integration this stage, which I should have run on the sm2 stage.
Diffstat (limited to 'org-drill.el')
-rw-r--r--org-drill.el34
1 files changed, 15 insertions, 19 deletions
diff --git a/org-drill.el b/org-drill.el
index 7046ade..d772657 100644
--- a/org-drill.el
+++ b/org-drill.el
@@ -1334,10 +1334,18 @@ Returns a list:
of
(* of last-interval))))
-(defun org-drill-determine-next-interval-sm5 (last-interval n ef quality
- failures meanq total-repeats
- of-matrix &optional delta-days)
- "Return next interval."
+(defun org-drill-determine-next-interval-sm5 (state quality of-matrix &optional delta-days)
+ "Return the SM5 schedule for STATE after a review of recall QUALITY (0-5).
+
+STATE is an `org-drill-card-state'. OF-MATRIX is the optimal-factor
+matrix. DELTA-DAYS, when set, adjusts the interval for an early or late
+repetition."
+ (let ((last-interval (org-drill-card-state-last-interval state))
+ (n (org-drill-card-state-repetitions state))
+ (ef (org-drill-card-state-ease state))
+ (failures (org-drill-card-state-failures state))
+ (meanq (org-drill-card-state-meanq state))
+ (total-repeats (org-drill-card-state-total-repeats state)))
(if (zerop n) (setq n 1))
(if (null ef) (setq ef 2.5))
(cl-assert (> n 0))
@@ -1384,7 +1392,7 @@ Returns a list:
failures
meanq
(1+ total-repeats)
- of-matrix)))))
+ of-matrix))))))
;;; Simple8 Algorithm =========================================================
(defun org-drill-simple8-first-interval (failures)
@@ -1518,13 +1526,7 @@ item will be scheduled exactly this many days into the future."
failures meanq total-repeats
&optional new-ofmatrix)
(cl-case org-drill-spaced-repetition-algorithm
- (sm5 (org-drill-determine-next-interval-sm5
- (org-drill-card-state-last-interval state)
- (org-drill-card-state-repetitions state)
- (org-drill-card-state-ease state) quality
- (org-drill-card-state-failures state)
- (org-drill-card-state-meanq state)
- (org-drill-card-state-total-repeats state) ofmatrix))
+ (sm5 (org-drill-determine-next-interval-sm5 state quality ofmatrix))
(sm2 (org-drill-determine-next-interval-sm2 state quality))
(simple8 (org-drill-determine-next-interval-simple8
(org-drill-card-state-last-interval state)
@@ -1582,13 +1584,7 @@ of QUALITY."
&optional _ofmatrix)
(cl-case org-drill-spaced-repetition-algorithm
(sm5 (org-drill-determine-next-interval-sm5
- (org-drill-card-state-last-interval state)
- (org-drill-card-state-repetitions state)
- (org-drill-card-state-ease state) quality
- (org-drill-card-state-failures state)
- (org-drill-card-state-meanq state)
- (org-drill-card-state-total-repeats state)
- org-drill-sm5-optimal-factor-matrix))
+ state quality org-drill-sm5-optimal-factor-matrix))
(sm2 (org-drill-determine-next-interval-sm2 state quality))
(simple8 (org-drill-determine-next-interval-simple8
(org-drill-card-state-last-interval state)