Within algebra documentation for a function there are ++ and -- comments The ++ comments are intended as documentation.
I have extended the meaning of ++ comments by appending a single letter. For example in the 'map' function from 'StreamFunction3' you'll see map : ((A,B) -> C,ST A,ST B) -> ST C ++ map(f,st1,st2) returns the stream whose elements are the ++ function f applied to the corresponding elements of st1 and st2. ++ \spad{map(f,[x0,x1,x2,..],[y0,y1,y2,..]) = [f(x0,y0),f(x1,y1),..]}. ++ ++S ++X m:=[i for i in 1..]::Stream(Integer) ++X n:=[i for i in 1..]::Stream(Integer) ++X f(i:Integer,j:Integer):Integer == i+j ++X map(f,m,n) The ++X comments are part of the output shown during display functions, e.g. )d op map will show the ++X comments as "examples" of how to use the function. There is also the 'ApplicationProgramInterface' which allows user-level access to various data structures: )abbrev package API ApplicationProgramInterface ++ Author: Timothy Daly, Martin Rubey ++ Date Created: 3 March 2009 ++ Date Last Updated: 24 March 2012 ++ Description: ++ This package contains useful functions that expose Axiom system internals ApplicationProgramInterface() : SIG == CODE where SIG ==> with getDomains : Symbol -> Set Symbol ++ getDomains(s) takes a category and returns the list of domains ++ that have that category ++ ++X getDomains 'IndexedAggregate getAncestors : Symbol -> Set Symbol ++ getAncestors(s) takes a category and returns the list of domains ++ that have that category as ancestors ++ ++X getAncestors 'IndexedAggregate credits : () -> Void ++ credits() prints a list of people who contributed to Axiom ++ ++X credits() summary : () -> Void ++ summary() prints a short list of useful console commands ++ ++X summary() reportInstantiations : Boolean -> Void ++ reportInstantiations(bool) is a debugging tool to show ++ instantiation information ++ ++X reportInstantiations(true) ++X 1 ++X reportInstantiations(false) CODE ==> add getDomains(cat:Symbol):Set(Symbol) == set [symbol car first destruct a _ for a in (destruct domainsOf(cat,NIL$Lisp)$Lisp)::List(SExpression)] getAncestors(cat:Symbol):Set(Symbol) == set [symbol car first destruct a _ for a in (destruct ancestorsOf(cat,NIL$Lisp)$Lisp)::List(SExpression)] credits() == ( credits()$Lisp ; void() ) summary() == ( summary()$Lisp ; void() ) reportInstantiations(b:Boolean): Void == REPORTINSTANTIATIONS(b)$Lisp void On Thu, Jun 12, 2025 at 5:06 AM Grégory Vanuxem <g.vanu...@gmail.com> wrote: > Hello, > > > Le mer. 11 juin 2025 à 20:59, 'Ralf Hemmecke' via FriCAS - computer > algebra system <fricas-devel@googlegroups.com> a écrit : > > > > Hi Waldek, > > > > as you know, I would like to let HyperDoc die. > > But, maybe that sound too extreme for what I actually mean. > > And I agree to some extend to your plan for a new hyperdoc. > > > > Let me explain my wishes. > > > > FriCAS should have an interface (in LISP or SPAD) that let's > > SPAD or external programs get information about > > categories/domains/packages/documentation. > > From such an interface it should be easy to generate any output format > > be it html, rst or pdf. > > +1 > > For what I am interested in right now, is displaying '++' > documentation in text form, and. readable directly in the interpreter > console. > From what I have read in api.spad and api2.spad the implementations > are tightly related the reST and HTML formats and I would like > plain/text format also. I do not want to use a Regex style replacement > method as it requires Julia or cl-ppcre and/or, for my concern, > cl-ppcre-unicode. Looking at api2 for example there is code to return > TexTree as a SEX expression. There is a TeXTree to HTML converter > which outputs the conversion in a file, no routine from what I have > seen that converts it to a String. I will eventually code something in > this regard. Maybe Waldek, you have already done this privately? > Having a generic parser would be a very good idea, I think. Gathering > the two parser implementations. > > > jlDocumentation(op) == > ops := getDatabase("o")$OperationsQuery > docs := elt(ops,equation('name, op)$QueryEquation) > elts : DataList(String) := elt(docs,'doc) > for i in 1 .. #elts repeat > output((elts.i)::OutputForm)$OutputPackage > -- PPRINT(jlEvalString(concat(["replace(raw_"", > > "\spad{svd(m)} computes the singular value decomposition \spad{SVD} of > \spad{ > m} such that \spad{SVD}.\spad{U} * diagonalMatrix(\spad{sv}) * > \spad{SVD}.\sp > ad{Vt} = \spad{m}." > "\spad{svd(m)} computes the singular value decomposition \spad{SVD} of > \spad{ > m} such that \spad{SVD}.\spad{U} * diagonalMatrix(\spad{sv}) * > \spad{SVD}.\sp > ad{Vt} = \spad{m}." > "\spad{svd(m)} computes the singular value decomposition \spad{SVD} of > \spad{ > m} such that \spad{SVD}.\spad{U} * diagonalMatrix(\spad{sv}) * > \spad{SVD}.\sp > ad{Vt} = \spad{m}." > "\spad{svd(m)} computes the singular value decomposition \spad{SVD} of > \spad{ > m} such that \spad{SVD}.\spad{U} * diagonalMatrix(\spad{sv}) * > \spad{SVD}.\sp > ad{Vt} = \spad{m}." > "\spad{svd(m)} computes the singular value decomposition of the matrix > \spad{ > m}." > Type: > Void > > And regexing/replacing, completely irrelevant for me, some Tex-like > construct I would like to obtain something like: > (25) -> jlDocumentation "svd" > > "svd(m) computes the singular value decomposition SVD of m such that > SVD.U * diagonalMatrix(sv) * SVD.Vt = m." > "svd(m) computes the singular value decomposition SVD of m such that > SVD.U * diagonalMatrix(sv) * SVD.Vt = m." > "svd(m) computes the singular value decomposition SVD of m such that > SVD.U * diagonalMatrix(sv) * SVD.Vt = m." > "svd(m) computes the singular value decomposition SVD of m such that > SVD.U * diagonalMatrix(sv) * SVD.Vt = m." > "svd(m) computes the singular value decomposition of the matrix m." > Type: > Void > > or: > > (26) -> jlDocumentation "string" > > "string(f) gives string corresponding to f. Valid only when string?(f) is > true" > "string(i) returns the decimal representation of i as a string." > "string(s) returns s as an element of Str. Error: if s is not an atom > that also belongs to Str." > "string(jt) returns the string representation of jt." > "string(x) stringifies x." > "string(s) converts the symbol s to a string. Error: if the symbol is > subscripted." > > (27) -> jlDocumentation "str" > Type: > Void > > But with more information (conditional exports, origins etc.) and > more options. Probably as a system command? > )display doc string as an example. > > Just my two cents. > > - Greg > > -- > You received this message because you are subscribed to a topic in the > Google Groups "FriCAS - computer algebra system" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/fricas-devel/mb_O0196RMQ/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > fricas-devel+unsubscr...@googlegroups.com. > To view this discussion visit > https://groups.google.com/d/msgid/fricas-devel/CAHnU2dY5SH52A0U56a8kSqSBO%2BFX0Lzsq%3Dw6hzBCfcuBd20m8Q%40mail.gmail.com > . > -- You received this message because you are subscribed to the Google Groups "FriCAS - computer algebra system" group. To unsubscribe from this group and stop receiving emails from it, send an email to fricas-devel+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/fricas-devel/CAJn5L%3D%2B1KwNu4xgtGEFRcRXmGWWoEMYgg2TZ0Y_owk2T81N0oQ%40mail.gmail.com.