expl3 (lớp lập trình LaTeX3), 65 byte
Sau đây định nghĩa một hàm in kết quả đến thiết bị đầu cuối (không may expl3
có tên hàm rất dài):
\def\1#1{\fp_show:n{1/(\clist_map_function:nN{#1}\2)}}\def\2{+1/}
Một tập lệnh hoàn chỉnh có thể được chạy từ thiết bị đầu cuối bao gồm tất cả các trường hợp thử nghiệm cũng như thiết lập để nhập expl3
:
\RequirePackage{expl3}\ExplSyntaxOn
\def\1#1{\fp_show:n{1/(\clist_map_function:nN{#1}\2)}}\def\2{+1/}
\1{1, 1}
\1{1, 1, 1}
\1{4, 6, 3}
\1{20, 14, 18, 8, 2, 12}
\1{10, 10, 20, 30, 40, 50, 60, 70, 80, 90}
\stop
Nếu chạy với pdflatex <filename>
sau đây là đầu ra giao diện điều khiển:
This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019) (preloaded format=pdflatex)
restricted \write18 enabled.
entering extended mode
(./cg_resistance.tex
LaTeX2e <2018-12-01>
(/usr/local/texlive/2019/texmf-dist/tex/latex/unravel/unravel.sty
(/usr/local/texlive/2019/texmf-dist/tex/latex/l3kernel/expl3.sty
(/usr/local/texlive/2019/texmf-dist/tex/latex/l3kernel/expl3-code.tex)
(/usr/local/texlive/2019/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def))
(/usr/local/texlive/2019/texmf-dist/tex/latex/l3packages/xparse/xparse.sty)
(/usr/local/texlive/2019/texmf-dist/tex/generic/gtl/gtl.sty))
> 1/(\clist_map_function:nN {1,1}\2)=0.5.
<recently read> }
l.3 \1{1, 1}
?
> 1/(\clist_map_function:nN {1,1,1}\2)=0.3333333333333333.
<recently read> }
l.4 \1{1, 1, 1}
?
> 1/(\clist_map_function:nN {4,6,3}\2)=1.333333333333333.
<recently read> }
l.5 \1{4, 6, 3}
?
> 1/(\clist_map_function:nN {20,14,18,8,2,12}\2)=1.129538323621694.
<recently read> }
l.6 \1{20, 14, 18, 8, 2, 12}
?
> 1/(\clist_map_function:nN
{10,10,20,30,40,50,60,70,80,90}\2)=2.611669603067675.
<recently read> }
l.7 \1{10, 10, 20, 30, 40, 50, 60, 70, 80, 90}
?
)
No pages of output.
Transcript written on cg_resistance.log.
Giải trình
\fp_show:n
: đánh giá đối số của nó dưới dạng biểu thức dấu phẩy động và in kết quả trên thiết bị đầu cuối, mọi macro có thể mở rộng được mở rộng trong quá trình đó.
\clist_map_function:nN
: lấy hai đối số, một danh sách được phân tách bằng dấu phẩy và hàm / macro, nếu được gọi như \clist_map_function:nN { l1, l2, l3 } \foo
nó sẽ mở rộng thành một cái gì đó như \foo{l1}\foo{l2}\foo{l3}
. Trong trường hợp của chúng tôi thay vì \foo
macro \2
được sử dụng, nó sẽ mở rộng để +1/
biểu thức mở rộng thành+1/{l1}+1/{l2}+1/{l3}