Home
Softono

Lisp Fsrs

Open source MIT Common Lisp
31
Stars
3
Forks
0
Issues
2
Watchers
8 months
Last Commit

 About Lisp Fsrs

Common/Emacs Lisp implementation for FSRS

Platforms

Web Self-hosted

Languages

Common Lisp

Links

Need Help Installing Lisp Fsrs?

We provide expert installation service for this software. Our team will install, configure, and secure Lisp Fsrs on your server. plans start at just $30.

#+TITLE: LISP-FSRS

[[https://melpa.org/#/fsrs][file:https://melpa.org/packages/fsrs-badge.svg]]

Implementation of the FSRS algorithm in Common Lisp and auto-transpiled to Emacs Lisp.

  • Usage ** Common Lisp #+BEGIN_SRC lisp CL-USER> (ql:quickload :lisp-fsrs) ; Ensure you have cloned this repository into the `local-projects' directory under your Quicklisp installation root. To load "lisp-fsrs": Load 1 ASDF system: lisp-fsrs ; Loading "lisp-fsrs" (:LISP-FSRS) CL-USER> (defparameter parameters (coerce '(0.2172 1.1771 3.2602 16.1507 7.0114 0.57 2.0966 0.0069 1.5261 0.112 1.0178 1.849 0.1133 0.3127 2.2934 0.2191 3.0004 0.7536 0.3332 0.1437 0.2) 'fsrs:parameters)) ,PARAMETERS CL-USER> (defparameter scheduler (fsrs:make-scheduler :parameters parameters)) ,SCHEDULER CL-USER> (defparameter card (fsrs:make-card)) ,CARD CL-USER> card #S(LISP-FSRS:CARD :CARD-ID 0 :STATE :LEARNING :STEP 0 :STABILITY NIL :DIFFICULTY NIL :DUE @2025-06-08T13:39:42.230941+08:00 :LAST-REVIEW NIL) CL-USER> (setf card (fsrs:scheduler-review-card scheduler card :good)) #S(LISP-FSRS:CARD :CARD-ID 0 :STATE :LEARNING :STEP 1 :STABILITY 3.2602 :DIFFICULTY 4.884632 :DUE @2025-06-08T13:49:49.476969+08:00 :LAST-REVIEW @2025-06-08T13:39:49.476969+08:00) CL-USER> (setf card (fsrs:scheduler-review-card scheduler card :good)) #S(LISP-FSRS:CARD :CARD-ID 0 :STATE :REVIEW :STEP NIL :STABILITY 3.5362437 :DIFFICULTY 4.8680573 :DUE @2025-06-12T13:39:50.242969+08:00 :LAST-REVIEW @2025-06-08T13:39:50.242969+08:00) #+END_SRC

To generate the fsrs package for Emacs after changing the code, ensure you are running the current Lisp session using sly in Emacs, then:

#+BEGIN_SRC lisp CL-USER> (ql:quickload :lisp-fsrs/emacs) To load "lisp-fsrs/emacs": Load 1 ASDF system: lisp-fsrs/emacs ; Loading "lisp-fsrs/emacs" [package lisp-fsrs.emacs].. (:LISP-FSRS/EMACS) CL-USER> (fsrs.emacs:translate-system) NIL #+END_SRC ** Emacs Lisp #+BEGIN_SRC emacs-lisp ELISP> (package-vc-install "https://github.com/open-spaced-repetition/lisp-fsrs.git") t ELISP> (setq fsrs-parameters [0.2172 1.1771 3.2602 16.1507 7.0114 0.57 2.0966 0.0069 1.5261 0.112 1.0178 1.849 0.1133 0.3127 2.2934 0.2191 3.0004 0.7536 0.3332 0.1437 0.2]) [0.2172 1.1771 3.2602 16.1507 7.0114 0.57 2.0966 0.0069 1.5261 0.112 1.0178 1.849 0.1133 0.3127 2.2934 0.2191 3.0004 0.7536 0.3332 0.1437 0.2]

ELISP> (setq fsrs-scheduler (fsrs-make-scheduler)) #s(fsrs-scheduler :parameters [0.2172 1.1771 3.2602 16.1507 7.0114 0.57 2.0966 0.0069 1.5261 0.112 1.0178 1.849 0.1133 0.3127 2.2934 0.2191 3.0004 0.7536 0.3332 0.1437 0.2] :desired-retention 0.9 :learning-steps ((1 :minute) (10 :minute)) :relearning-steps ((10 :minute)) :maximum-interval (36500 :day) :enable-fuzzing-p t)

ELISP> (setq fsrs-card (fsrs-make-card)) #s(fsrs-card :card-id 0 :state :learning :step 0 :stability nil :difficulty nil :due "2025-06-08T05:38:50Z" :last-review nil)

ELISP> (setq fsrs-card (cl-nth-value 0 (fsrs-scheduler-review-card fsrs-scheduler fsrs-card :good))) #s(fsrs-card :card-id 0 :state :learning :step 1 :stability 3.2602 :difficulty 4.884631634813845 :due "2025-06-08T05:48:52Z" :last-review "2025-06-08T05:38:52Z")

ELISP> (setq fsrs-card (cl-nth-value 0 (fsrs-scheduler-review-card fsrs-scheduler fsrs-card :good))) #s(fsrs-card :card-id 0 :state :review :step nil :stability 3.536243655619573 :difficulty 4.868056502338024 :due "2025-06-10T05:38:53Z" :last-review "2025-06-08T05:38:53Z") #+END_SRC