updated
authorChristian Urban <christian.urban@kcl.ac.uk>
Fri, 24 Oct 2025 10:45:17 +0100
changeset 1017 b0d44eb1ecc7
parent 1016 c02d409ed7f4
child 1018 ab6c61f82c91
updated
handouts/amm-faq.pdf
handouts/amm-faq.tex
Binary file handouts/amm-faq.pdf has changed
--- a/handouts/amm-faq.tex	Fri Oct 24 08:55:14 2025 +0100
+++ b/handouts/amm-faq.tex	Fri Oct 24 10:45:17 2025 +0100
@@ -21,7 +21,7 @@
 inside the REPL. So running Scala-scripts on the command
 line with for example
 
-\begin{lstlisting}[language={},numbers=none,basicstyle=\ttfamily\small]
+\begin{lstlisting}[language={},numbers=none]
 $ amm cw02.sc
 \end{lstlisting} %% $
 
@@ -76,7 +76,53 @@
 \end{lstlisting}
 
 \noindent You need to then use \code{&} in the code for the 
-\code{WHILE_REGS}
+\code{WHILE_REGS}.
+
+\subsection*{Problem with Loading Dynamically Files}
+
+There seems to be cache problems with loading dynamically files in the REPL.
+For example in the file \code{thompson.sc}, the code for DFAs, NFAs etc is 
+loaded using:
+
+\begin{lstlisting}[numbers=none,language=Scala]
+import $file.dfa, dfa._ 
+import $file.nfa, nfa._
+import $file.enfa, enfa._
+\end{lstlisting}%$
+
+\noindent The menace is that all works perfectly in the first REPL session,
+but if you close it and then re-open it for example the next day, you 
+receive the following error when you try to re-evaluate the same lines:
+
+\begin{lstlisting}[numbers=none,language=Scala]
+-- [E008] Not Found Error: ~/cfl-material/progs/automata/nfa.sc:50:2 
+50 |  dfa
+   |  ^^^
+   |  value dfa is not a member of ammonite.$sess - did you mean $sess.nfa?
+-- [E006] Not Found Error: ~/cfl-material/progs/automata/nfa.sc:6:18 
+6 |import $file.$  , dfa._ 
+  |                  ^^^
+  |                  Not found: dfa
+  |
+  | longer explanation available when compiling with `-explain`
+Compilation Failed
+\end{lstlisting}%$\medskip
+
+\noindent\textbf{Fix:} The code again runs absolutely fine when called on the
+commandline. But the REPL trips over. In this case, the trick with using the 
+Scala REPL does not work, because it does not support dynamically loading
+files. However, one ugly fix is to cut-and-paste all the code into a 
+single file and then develop this one gigantic file. Or a slightly
+less ugly solution is toi clear out the cache of ammonite. The cache
+on my system is located in 
+
+\begin{lstlisting}[language={},numbers=none]
+~/.ammonite/cache/3.0.3/
+\end{lstlisting}
+
+\noindent
+I usually delete all files inside this directory and in this way force 
+ammonite to be in a consistent state.
 
 \end{document}