<Harag>
I was trying to do a function symbol count on alisp file just using read naively, but I would like to stop read from looking up symbols...ie only give me raw sexp '(car (list 1), do no prosessing, would it be possible?
doomlist3 has joined #lisp
<doomlist3>
is smalltalk a lisp?
<doomlist3>
i m learning it
<phoe>
doomlist3: no, it's not
<phoe>
it is, however, an image-based programming language, just like Lisp
<phoe>
Harag: what do you mean, stop read from looking up symbols?
bhartrihari has left #lisp ["Disconnected: Replaced by new connection"]
bhartrihari has joined #lisp
<phoe>
if you have a file containing a string "(defun foo (x y) (+ x y))", then what should it return?
<Harag>
'(defun foo (x y) (+ x y)) so I can just walk the sexp
<phoe>
flip214: I don't know if it's possible to tell the reader that #\: should not be interpreted as a package marker.
oxum has quit [Ping timeout: 264 seconds]
<beach>
doomlist3: There is no widely agreed-upon definition of "Lisp". In fact, several people who invent their own language for some reason want it to be "a Lisp", and some of them come here to convince us that it is.
gaqwas has quit [Remote host closed the connection]
mathrick has quit [Ping timeout: 240 seconds]
oxum has joined #lisp
<beach>
flip214: There is really no reason not to use Eclector these days. We should stamp out implementation-specific readers. :)
<Harag>
flip214: I am trying (set-syntax-from-char #\: #\' table2) now
<phoe>
Harag: but that will break foo:bar into foo 'bar
heisig has joined #lisp
<phoe>
likely not what you want because (foo:bar) and (foo 'bar) will become indistinguishable
<beach>
Harag: There is really no reason not to use Eclector for this kind of stuff.
<Harag>
ok
<beach>
Harag: It was written precisely to do this kind of stuff.
unl0ckd has quit [Quit: killed]
camlriot42 has quit [Quit: killed]
cairn has quit [Quit: killed]
sammich has quit [Quit: killed]
Gnuxie[m] has quit [Quit: killed]
katco has quit [Quit: killed]
even4void[m] has quit [Quit: killed]
MrtnDk[m] has quit [Quit: killed]
liamz[m] has quit [Quit: killed]
userself has quit [Quit: killed]
infra_red[m] has quit [Quit: killed]
bhartrihari has left #lisp ["Disconnected: Replaced by new connection"]
bhartrihari has joined #lisp
dvdmuckle has quit [Ping timeout: 245 seconds]
nckx has quit [Ping timeout: 264 seconds]
madmonkey has quit [Ping timeout: 246 seconds]
nckx has joined #lisp
dvdmuckle has joined #lisp
ljavorsk has quit [Ping timeout: 260 seconds]
v88m has quit [Ping timeout: 264 seconds]
_roman_ has joined #lisp
unl0ckd has joined #lisp
<Harag>
phoe: that code compiles fine but when you run the test there is :The function ECLECTOR.BASE:RECOVER is undefined
<phoe>
Harag: wait a second
<phoe>
eclector.base:recover? where does that come from
<Harag>
then handler-bind
<scymtym>
only in recent versions
<phoe>
oh, right
<phoe>
(ql:update-all-dists)
* scymtym
replied without reading any context
<Harag>
ok
kaftejiman has joined #lisp
<Harag>
beach: ...how ironic, my little sexp parser crashes when trying to pars a loop in the sexp...roflma
<phoe>
what sort of loop?
<Harag>
+y
<phoe>
like cl:loop?
<Harag>
yes
<phoe>
why?
<Harag>
iets my fault
<Harag>
my sexp parser does not like (KEY NIL . REST)
<phoe>
why?
__jrjsmrtn__ has quit [Ping timeout: 264 seconds]
<phoe>
it's a normal consing dot
<Harag>
phoe: because I mostlikely wrote it badly
nikkal has quit [Ping timeout: 258 seconds]
<beach>
Harag: Are you saying that you are using something other than Eclector and that fails?
<Harag>
I am trying to process what I get from eclector and that fails
<beach>
I see.
random-nick has joined #lisp
contrapunctus has joined #lisp
rumbler31 has joined #lisp
nicktick has quit [Ping timeout: 265 seconds]
rumbler31 has quit [Ping timeout: 260 seconds]
Christ0pher has quit [Ping timeout: 265 seconds]
Christ0pher has joined #lisp
<Harag>
phoe: fyi when eclector reads a lisp file that does readtable stuff it crashes, it does not like ".."
gravicappa has quit [Ping timeout: 246 seconds]
<Harag>
or maybe it that wile is suppose to crash a reader advanced-readtable-20130720-git/test.lisp
vutral_ has quit [Ping timeout: 272 seconds]
<phoe>
Harag: AFAIK eclector has its own readtables.
<phoe>
so you'll need to modify the eclector readtable with the proper reader macros, not just the native one
userself has joined #lisp
camlriot42 has joined #lisp
MrtnDk[m] has joined #lisp
infra_red[m] has joined #lisp
deselby has joined #lisp
Gnuxie[m] has joined #lisp
cairn has joined #lisp
even4void[m] has joined #lisp
katco has joined #lisp
sammich has joined #lisp
liamz[m] has joined #lisp
fountainpen[m] has joined #lisp
mathrick has joined #lisp
_roman_ has quit [Quit: WeeChat 1.9.1]
orivej has joined #lisp
twelvemonkeys has quit [Ping timeout: 240 seconds]
twelvemonkeys has joined #lisp
jesse1010 has joined #lisp
Bike has joined #lisp
orivej has quit [Ping timeout: 246 seconds]
APic has joined #lisp
<scymtym>
eclector does not read files, only individual expressions. reading files with CL semantics must interleave expression reading with processing of toplevel forms which is outside the scope of eclector
deselby has quit [Quit: Idle for 30+ days]
Lord_of_Life has quit [Ping timeout: 264 seconds]
Lord_of_Life has joined #lisp
xrash has joined #lisp
lusencape1 has joined #lisp
lusencape1 has left #lisp [#lisp]
gravicappa has joined #lisp
SpaceIgor2075 has quit [Read error: Connection reset by peer]
<pve>
Is it possible to write CL in such a way that the source file can be correctly parsed without having to load it or its dependencies? I assume that means no defmacro, ever, but what else?
<phoe>
pve: what do you mean, "parsed"?
<phoe>
read? compiled?
Cymew has joined #lisp
<pve>
phoe: read, and now that you mention it, why not compiled
<jackdaniel>
compile-file foo
<phoe>
reading doesn't care about DEFMACRO, since that comes later
<phoe>
compiling is capable of accepting macros as long as they are defined earlier in the file or already available in the image
<pve>
yeah sorry, what I'm getting at is the possiblity of doing some kind of static analysis
<pve>
I'm not explaining it very well, sorry
<phoe>
it's non-trivial
<phoe>
first is the issue that Harag mentioned earlier - if you try to inspect code from the outside, you don't have packages into which you attempt to intern symbols
<phoe>
reading foo:bar is an error when there's no package FOO
<pve>
I figured interning would be a problem
<phoe>
second, macroexpanding stuff is non-trivial, since you need to evaluate macro functions in order to be able to macroexpand stuff
<phoe>
so either you do that, and you are no longer "outside" that code, or you need some external information about how macros work and what do the macro arguments mean
<pve>
but suppose I only ever use tha standard macros, and never define my own?
heisig has quit [Read error: Connection reset by peer]
<jackdaniel>
or you may do live analysis
_heisig has joined #lisp
<jackdaniel>
i.e load the program and have the analysis tool load on top of that
<phoe>
I assume this is because all structures get their own copiers for free because of DEFSTRUCT :COPIER
<Harag>
("CAR" 3458)
<pve>
mainly I'm exploring if there's anything to gain from having a regular syntax in my smalltalk-inspired language (built on top of lisp) in terms of linting or automated refactoring tools etc
<pve>
I feel a macro-like facility would make such things much harder
<Harag>
("FIRST" 3185)
karlosz has quit [Quit: karlosz]
<phoe>
Harag: could you paste the whole list online somewhere?
<jackdaniel>
("NULL" T)
gaqwas has joined #lisp
gaqwas has quit [Changing host]
gaqwas has joined #lisp
<Harag>
phoe: I would paste the code to read your own quicklisp, but its very ugly and most likely full of false positives
<Harag>
("NULL" 3176)
<phoe>
Harag: sure, it's always something
gravicappa has quit [Ping timeout: 246 seconds]
gravicappa has joined #lisp
<Harag>
phoe: check memos
Christ0pher has quit [Ping timeout: 265 seconds]
Christ0pher has joined #lisp
jonatack has joined #lisp
<jackdaniel>
idea for an extension: sealed packages. compiled in one compilation unit without possibility to access internal symbols. then compiler could optimize them having in mind, that only exported symbols are accessible from the user code
<jackdaniel>
I just thought of it, there might be some basic flaws in this idea :)
Christ0pher has quit [Ping timeout: 246 seconds]
Christ0pher has joined #lisp
simendsjo has joined #lisp
jonatack has quit [Ping timeout: 246 seconds]
jonatack has joined #lisp
<Harag>
("SEVENTH" 6)... so close just one more needed
<Harag>
("EVAL" 887)
<Harag>
sorry thats the last one I will post, just thought it was interesting
<dlowe>
If I were to make a toy lisp, I would definitely have first-class environments, at least for symbols, in order to facilitate stuff like reading in code and analyzing it
hineios730393479 has quit [Ping timeout: 246 seconds]
shangul has quit [Ping timeout: 260 seconds]
Christ0pher has quit [Ping timeout: 256 seconds]
Christ0pher has joined #lisp
gaqwas has quit [Remote host closed the connection]
mingus has quit [Ping timeout: 260 seconds]
shangul has joined #lisp
rumbler31 has joined #lisp
theBlackDragon has quit [Ping timeout: 265 seconds]
theBlackDragon has joined #lisp
rgherdt has quit [Quit: Leaving]
rgherdt has joined #lisp
jackdaniel has quit [Remote host closed the connection]
jackdaniel has joined #lisp
rumbler31 has quit [Ping timeout: 260 seconds]
_heisig has quit [Quit: Leaving]
Christ0pher has quit [Ping timeout: 265 seconds]
Christ0pher has joined #lisp
igemnace has quit [Quit: WeeChat 2.8]
hineios730393479 has joined #lisp
<pve>
dlowe: in my toy language, I currently read source files to figure out what they provide and they depend on, so that I can just give it a directory full of source files and have them load automatically in the correct order.
<pve>
I know it's kind of shallow, but soo convenient
<dlowe>
yeah, there was a utility that did that for CL using per-file packages
<pve>
I never want to edit an asd file again, and it makes me really want to explore this kind of analysis further
<pve>
you mean the inferred-system thing
<dlowe>
yeah
knuckles has quit [Ping timeout: 264 seconds]
Christ0pher has quit [Ping timeout: 240 seconds]
Christ0pher has joined #lisp
kinope has joined #lisp
ayuce has joined #lisp
knuckles has joined #lisp
lavaflow has quit [Ping timeout: 264 seconds]
EvW has joined #lisp
wsinatra has joined #lisp
<pve>
my approach is similar, except external dependencies (alexandria etc) need to be explicitly specified, but internal dependencies are automatically deduced by (naively) looking at the code (like, if a file instantiates a class foo, then the file containing foo gets loaded before that file)
<kinope>
Hey all! I have a problem that requires a code walker, I have made a very add-hoc one atm that also expands some expressions for me at compile-time but it's not very flexible and only expands expressions at the first level of any tree of expressions. While I have an interest in understanding how to make a good one, doing that right now is at
<kinope>
cross-purposes with the problem I'm working on. Do you have any library recommendations?
<beach>
You can use MichaelRaskin's Agnostic Lizard.
<kinope>
Thank you :)
jonatack has quit [Ping timeout: 240 seconds]
bsd4me has joined #lisp
cosimone has quit [Quit: Quit.]
ggole has joined #lisp
dominic34 has joined #lisp
FreeBirdLjj has joined #lisp
FreeBirdLjj has quit [Ping timeout: 260 seconds]
orivej has joined #lisp
wxie has joined #lisp
Cymew has quit [Ping timeout: 260 seconds]
Christ0pher has quit [Ping timeout: 258 seconds]
Christ0pher has joined #lisp
bhartrihari has left #lisp ["Disconnected: Replaced by new connection"]
bhartrihari has joined #lisp
wxie has quit [Ping timeout: 258 seconds]
notzmv has quit [Ping timeout: 246 seconds]
doomlist3 has quit [Ping timeout: 260 seconds]
dyelar has joined #lisp
nicktick has joined #lisp
Josh_2 has joined #lisp
<Josh_2>
Afternoon
<beach>
Hello Josh_2.
renzhi has joined #lisp
jonatack has joined #lisp
EvW has quit [Ping timeout: 260 seconds]
vidak` has quit [Read error: Connection reset by peer]
junkicide has joined #lisp
sjl has joined #lisp
kinope has quit [Ping timeout: 245 seconds]
Christ0pher has quit [Ping timeout: 260 seconds]
<junkicide>
hello, newbie here. could someone explain why (let ((me "dance with you")) me) give "dance with you" as output? what is the significance of adding the me at the end?
<junkicide>
this is an example from learn x in y minutes
<Josh_2>
the form is evaluating to the value of the variable me
Christ0pher has joined #lisp
<Josh_2>
which you bind to "dance with you" in the let form
<Bike>
(let ((me "dance with you")) ...body...) means to bind the variable ME to that string within the body
<Bike>
ME in the body means to read the value of that variable
EvW has joined #lisp
<junkicide>
oh I see, that clarifies it for me. thanks
<Bike>
you could also do e.g. (let ((me "dance with you")) (length me)) in which case the variable will be read, and the value passed to the LENGTH function, and then you'll get 14
<junkicide>
oh, that's a good example thanks
notzmv has joined #lisp
simendsjo has quit [Ping timeout: 256 seconds]
jonatack has quit [Ping timeout: 265 seconds]
jonatack has joined #lisp
junkicide has quit [Quit: Leaving]
<phoe>
annnnnnd they left
nicktick has quit [Ping timeout: 265 seconds]
nicktick has joined #lisp
EvW has quit [Ping timeout: 240 seconds]
knuckles has quit [Ping timeout: 258 seconds]
jonatack_ has joined #lisp
knuckles has joined #lisp
jw4 has quit [Read error: Connection reset by peer]
jonatack has quit [Ping timeout: 260 seconds]
jw4 has joined #lisp
cosimone has joined #lisp
Christ0pher has quit [Ping timeout: 240 seconds]
Christ0pher has joined #lisp
bitmapper has joined #lisp
Cymew has joined #lisp
<jasom>
so my PoC integration of lisp with Geany just got a lot of attention on /r/Common_Lisp; I'll dust it off and give it a spin tonight to remind myself of what the status of it is.
<jasom>
stylewarning: assuming you are /u/stylewarning, irc is probably a better place to reach me than via reddit DMs
<phoe>
huh! I assume that there *is* a closing paren there
<phoe>
but nonetheless ECL misbehaves
<phoe>
or am I misinterpreting?
dddddd has joined #lisp
twelvemonkeys has quit [Quit: leaving]
ebrasca has quit [Read error: Connection reset by peer]
jibanes has joined #lisp
ebrasca has joined #lisp
lithper has joined #lisp
efm has quit [Ping timeout: 256 seconds]
varjag has quit [Quit: ERC (IRC client for Emacs 25.2.2)]
<jasom>
p_l: yeah, a Gentle style cons diagram incorporated into the logo might work
Josh_2 has quit [Read error: Connection reset by peer]
simendsjo has joined #lisp
efm has joined #lisp
doomlist3 has joined #lisp
<lithper>
What's the best library for resizing jpegs in CL? I've looked at cl-jpeg but it doesn't support all jpeg formats. Is lisp-magick-wand the way to go?
orivej has quit [Ping timeout: 265 seconds]
orivej_ has joined #lisp
jonatack has joined #lisp
<phoe>
lithper: maybe #lispgames might tell you more, they tend to do a lot of image processing
<phoe>
axion: ^
<phoe>
maybe you know some solution
toorevitimirp has quit [Ping timeout: 260 seconds]
<rpg>
@phoe: You are right -- the file is loadable in the REPL, just not when loaded on the command line.
<rpg>
phoe: Plus, ugh -- throwing away any possible state. :-(
dilated_dinosaur has quit [Ping timeout: 258 seconds]
toorevitimirp has joined #lisp
orivej_ has quit [Ping timeout: 264 seconds]
orivej has joined #lisp
doomlist3 has quit [Quit: not part but quit]
<rpg>
Aha! It's a compiler error! Before I (require 'cmp) that runs fine in the REPL. Afterwards, it errors out.
* phoe
gasp
<lithper>
phoe: Thank you!
contrapunctus has left #lisp ["Disconnected: closed"]
dilated_dinosaur has joined #lisp
contrapunctus has joined #lisp
rpg has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
cosimone has quit [Quit: Quit.]
EvW1 has joined #lisp
dale_ has joined #lisp
dale_ is now known as dale
EvW1 has quit [Ping timeout: 240 seconds]
bsd4me has quit [Remote host closed the connection]
toorevitimirp has quit [Ping timeout: 260 seconds]
toorevitimirp has joined #lisp
contrapunctus has left #lisp ["Disconnected: closed"]
EvW has joined #lisp
bsd4me has joined #lisp
contrapunctus has joined #lisp
Christ0pher has quit [Ping timeout: 256 seconds]
Christ0pher has joined #lisp
EvW has quit [Ping timeout: 260 seconds]
marusich has quit [Quit: Leaving]
simendsjo has quit [Ping timeout: 260 seconds]
Christ0pher has quit [Ping timeout: 260 seconds]
Christ0pher has joined #lisp
orivej has quit [Ping timeout: 260 seconds]
orivej has joined #lisp
rpg has joined #lisp
contrapunctus has left #lisp [#lisp]
orivej_ has joined #lisp
orivej has quit [Ping timeout: 264 seconds]
lithper has quit [Remote host closed the connection]
EvW1 has joined #lisp
karlosz has joined #lisp
madrik has joined #lisp
<madrik>
Greetings.
<madrik>
I want to set up a Gitlab CI pipeline for a Lisp project of mine that uses FiveAM for testing.
<madrik>
How should I proceed?
rippa has joined #lisp
contrapunctus has joined #lisp
sjl has quit [Ping timeout: 240 seconds]
<jackdaniel>
what did you try already?
<madrik>
IIRC, I need to set up a Runner, which can be either a container or a virtual machine.
<madrik>
I already have an AWS Lightsail instance.
<madrik>
Would that be alright, or is a container recommended?
Cymew has joined #lisp
<jackdaniel>
vm should be fine
<madrik>
jackdaniel: Thanks.
gaqwas has joined #lisp
Josh_2 has joined #lisp
X-Scale has quit [Ping timeout: 246 seconds]
emacsomancer has quit [Read error: Connection reset by peer]
orivej_ has quit [Ping timeout: 260 seconds]
orivej has joined #lisp
fountainpen[m] has quit [Quit: Idle for 30+ days]
cosimone has joined #lisp
emacsomancer has joined #lisp
dominic34 has quit [Ping timeout: 260 seconds]
Cymew has quit [Ping timeout: 256 seconds]
kaftejiman has quit [Remote host closed the connection]
nabataeus has joined #lisp
dominic34 has joined #lisp
papachan has joined #lisp
rumbler31_ has quit [Ping timeout: 260 seconds]
bocaneri has quit [Read error: Connection reset by peer]
fouric has quit [Ping timeout: 256 seconds]
ayuce has joined #lisp
rumbler31_ has joined #lisp
X-Scale has joined #lisp
justache has quit [Remote host closed the connection]
cosimone has quit [Quit: Quit.]
ggole has quit [Quit: Leaving]
justache has joined #lisp
EvW1 has quit [Read error: Connection reset by peer]
simendsjo has joined #lisp
X-Scale` has joined #lisp
X-Scale has quit [Ping timeout: 244 seconds]
X-Scale` is now known as X-Scale
simendsjo has quit [Ping timeout: 240 seconds]
ayuce has quit [Remote host closed the connection]
<Harag>
is there ever a good reason to use a KEYWORD symbol as a slot accessor?
<Harag>
or what is the worst that could happen except that your accessor gets clobbered or you clobber some one elses?
<Bike>
that's pretty much the worst thing that could happen, i think
<Bike>
using keywords as function names is legal
<Harag>
is it fround appon in general?
shka_ has quit [Ping timeout: 260 seconds]
shangul has joined #lisp
<Bike>
i wouldn't do it in like, a library
<Bike>
might be convenient in the repl or something
<pve>
Harag: are you looking to make the accessors more conveniently available, or do you have some other use case in mind? just curious..
<Harag>
i have an or something in mind...
bhartrihari has joined #lisp
<Harag>
(getx (list :eish 1) :eish)
<Harag>
(getx some-object-instance :eish)
<Harag>
just uniform syntax if I want to swop out "data objects" at some time
ym has quit [Quit: Leaving]
edgar-rft has joined #lisp
<Harag>
I am waiting for some one to tell me that a macro could do it better...but i cant see it and I sux at writing macros
<pve>
Harag: i see, but does it have to be keywords? your example would work with 'eish as well, no?
<pve>
or do you anticipate many different packages?
<Harag>
yes but if you want to persist that "data object" and share/use it from different packages it starts getting interesting
<pve>
you would prefer to have the property universal, and the result only depend on the data object
<Harag>
I suppose I could swop/remove the package when I perist
cosimone has joined #lisp
<Harag>
but the big pain is having to rewrite "accessing code" if you change your mind about the underlaying data object.
<Bike>
i don't understand the problem here. you have this "getx" function that works with both plists and objects
<Bike>
but plists don't have to have keywords either, you can just use symbols, and you probably ought to
<Bike>
symbols -> non-keyword symbols
<Harag>
yes bike but lets say you write (list 'eish 1) to a file in one app/packaeg then the package is written with it
<Harag>
when you use read in another package that package needs to load the package that wrote it to resolve the symbol
<Bike>
sure does
<Bike>
do you expect to be able to de/serialize standard-objects without having to load the class definition?
<Harag>
so in my mind (list :employee-no 1) is better than (list 'employee-no 1)
<Harag>
no not standard objects just plist
scymtym has quit [Ping timeout: 260 seconds]
bhartrihari has left #lisp ["Disconnected: closed"]
<Bike>
why do standard object accessors matter then
<pve>
Harag: is it because you convert the plist to a class at some point?
<pve>
i mean instance
<Harag>
at this stage just a struct in some cases
bhartrihari has joined #lisp
<Harag>
Bike: the standard accessor is just for me because I hate having to go back and do that type of code change
<Bike>
mostly i don't understand this application design where you want to deserialize objects without having infrastructure for that specific type of object, which would presumably be in the code with whatever package
<Harag>
if I wanted infrastructure I could add a declaritive definition that has everything to do with the data and nothing to do with how the data is represented in lisp
<pve>
Harag: perhaps you could write explicit getx methods for each class and property you intend to read, mapping the :eish property indicator to whatever slot or accessor that produces that property
<Harag>
Bike: dont think of it as deserializing objects think of it as passing raw data in the sense op key value pairs '(:key-1 atom :key-1 atom ...)
<Harag>
op=of
Christ0pher has quit [Ping timeout: 246 seconds]
Christ0pher has joined #lisp
jprajzne has quit [Quit: jprajzne]
jprajzne has joined #lisp
jprajzne has quit [Client Quit]
jprajzne has joined #lisp
bhartrihari has left #lisp ["Disconnected: Replaced by new connection"]
efm has quit [Read error: Connection reset by peer]
shangul has quit [Ping timeout: 246 seconds]
jprajzne has quit [Quit: jprajzne]
jprajzne has joined #lisp
hlauk has joined #lisp
efm has joined #lisp
bhartrihari has joined #lisp
jprajzne has quit [Client Quit]
jprajzne has joined #lisp
sjl has joined #lisp
orivej has quit [Ping timeout: 240 seconds]
orivej has joined #lisp
Jesin has quit [Quit: Leaving]
ebrasca has quit [Remote host closed the connection]
scymtym has joined #lisp
rumbler31_ has quit [Ping timeout: 264 seconds]
stoneglass has joined #lisp
madrik has left #lisp ["sleep"]
bsd4me has quit [Remote host closed the connection]
toorevitimirp has quit [Ping timeout: 240 seconds]
hlauk_ has joined #lisp
stoneglass has left #lisp ["ERC (IRC client for Emacs 26.3)"]
hlauk has quit [Ping timeout: 240 seconds]
flocks has joined #lisp
Jesin has joined #lisp
stoneglass has joined #lisp
hlauk_ has quit [Quit: hlauk_]
Krystof has joined #lisp
orivej has quit [Ping timeout: 260 seconds]
orivej has joined #lisp
flocks has quit [Remote host closed the connection]