diff options
author | Leon Rische <leon.rische@me.com> | 2020-11-23 10:32:45 +0100 |
---|---|---|
committer | Leon Rische <leon.rische@me.com> | 2020-11-23 10:32:45 +0100 |
commit | 7eb17b4d70835dc347032aeb4c358e2aa42d44d7 (patch) | |
tree | 80dffd27bbc6e941c11b1fa9f4b953d2d3103d7f /org-fc.el | |
parent | f1a872b53b173b3c319e982084f333987ba81261 (diff) |
Extract SM2 code
Diffstat (limited to 'org-fc.el')
-rw-r--r-- | org-fc.el | 79 |
1 files changed, 5 insertions, 74 deletions
@@ -133,42 +133,6 @@ types." :type '(choice (const sm2-v1) (const sm2-v2)) :group 'org-fc) -(defcustom org-fc-sm2-changes - '((again . -0.3) - (hard . -0.15) - (good . 0.0) - (easy . 0.15)) - "Changes to a cards ease depending on its rating." - :type 'list - :group 'org-fc) - -(defcustom org-fc-sm2-fixed-intervals - '(0.0 0.01 1.0 6.0) - "Hard-coded intervals for the first few card boxes. -Values are in days." - :type 'list - :group 'org-fc) - -(defcustom org-fc-sm2-ease-min 1.3 "Lower bound for a cards ease." - :type 'float - :group 'org-fc) -(defcustom org-fc-sm2-ease-initial 2.5 "Initial ease." - :type 'float - :group 'org-fc) -(defcustom org-fc-sm2-ease-max 5.0 "Upper bound for a cards ease." - :type 'float - :group 'org-fc) - -(defcustom org-fc-sm2-fuzz-min 0.9 - "Lower bound for random interval fuzz factor." - :type 'float - :group 'org-fc) - -(defcustom org-fc-sm2-fuzz-max 1.1 - "Upper bound for random interval fuzz factor." - :type 'float - :group 'org-fc) - (defcustom org-fc-bury-siblings nil "If non-nil, show at most one position of a card per review. Does not apply to cloze single and cloze enumeration cards." @@ -892,42 +856,8 @@ Positions are shuffled in a way that preserves the order of the (sort positions (lambda (a b) (> (car a) (car b))))))) ;;; Review & Spacing -;;;; Spacing Algorithm (SM2) - -(defun org-fc-sm2-fuzz (interval) - "Apply fuzz to INTERVAL. -INTERVAL is by a random factor between `org-fc-sm2-fuzz-min' and -`org-fc-sm2-fuzz-max'" - (* - interval - (+ org-fc-sm2-fuzz-min - (cl-random (- org-fc-sm2-fuzz-max org-fc-sm2-fuzz-min))))) - -(defun org-fc-sm2-next-parameters (ease box interval rating) - "Calculate the next parameters of a card, based on the review RATING. -EASE, BOX and INTERVAL are the current parameters of the card." - (let* ((next-ease - (if (< box 2) - ease - (min - (max - (+ ease (alist-get rating org-fc-sm2-changes)) - org-fc-sm2-ease-min) - org-fc-sm2-ease-max))) - (next-box - (cond - ;; If a card is rated easy, skip the learning phase - ((and (eq box 0) (eq rating 'easy)) 2) - ;; If the review failed, go back to box 0 - ((eq rating 'again) 0) - ;; Otherwise, move forward one box - (t (1+ box)))) - (next-interval - (cond ((< next-box (length org-fc-sm2-fixed-intervals)) - (nth next-box org-fc-sm2-fixed-intervals)) - ((and (eq org-fc-algorithm 'sm2-v2) (eq rating 'hard)) (* 1.2 interval)) - (t (org-fc-sm2-fuzz (* next-ease interval)))))) - (list next-ease next-box next-interval))) + +(require 'org-fc-algo-sm2) ;;;; Demo Mode @@ -1083,8 +1013,9 @@ END is the start of the line with :END: on it." (defun org-fc-review-data-default (position) "Default review data for position POSITION." - (list position org-fc-sm2-ease-initial 0 0 - (org-fc-timestamp-now))) + (case org-fc-algorithm + ('sm2-v1 (org-fc-algo-sm2-initial-review-data position)) + ('sm2-v2 (org-fc-algo-sm2-initial-review-data position)))) (defun org-fc-review-data-update (positions) "Update review data to POSITIONS. |