Expl3 신택스 연습할 겸 LaTeX으로 짜봄 


\documentclass{article}

\usepackage{expl3}


\ExplSyntaxOn


\cs_set:Npn \lev_fn:nn #1 #2{

    \int_new:N \l_lenA_int 

    \int_new:N \l_lenB_int

    \int_set:Nn \l_lenA_int {\tl_count:n{#1}+1}

    \int_set:Nn \l_lenB_int {\tl_count:n{#2}+1}


    \intarray_new:Nn \l_dp_intarray {\l_lenA_int * \l_lenB_int}

    \int_step_inline:nn {\l_lenB_int} {

        \setDP:nnn{1}{##1}{##1-1}

    }

    \int_step_inline:nn {\l_lenA_int} {

        \setDP:nnn{##1}{1}{##1-1}

    }


    \tl_new:N \l_i_tl

    \tl_new:N \l_j_tl

    \str_new:N \l_a_str 

    \str_new:N \l_b_str

    \int_step_variable:nnNn {2}{\l_lenA_int} \l_i_tl {

        \int_step_variable:nnNn {2}{\l_lenB_int} \l_j_tl {

            \str_set:Nx \l_a_str {\str_item:nn {#1} {\l_i_tl-1}} 

            \str_set:Nx \l_b_str {\str_item:nn {#2} {\l_j_tl-1}}

            \str_if_eq:NNTF {\l_a_str} {\l_b_str} {

                \setDP:nnn{\l_i_tl}{\l_j_tl}{\getDP:nn{\l_i_tl-1}{\l_j_tl-1}}

            } {

                \setDP:nnn{\l_i_tl}{\l_j_tl}{

                    \int_min:nn{

                        \int_min:nn{

                            \getDP:nn{\l_i_tl-1}{\l_j_tl-1}

                        }{

                            \getDP:nn{\l_i_tl}{\l_j_tl-1}

                        }

                        }{

                            \getDP:nn{\l_i_tl-1}{\l_j_tl}

                        } + 1

                }

            }

        }

    }

    \intarray_item:Nn \l_dp_intarray {\l_lenA_int * \l_lenB_int}

}


\cs_set:Npn \getDP:nn #1 #2 {

    \intarray_item:Nn \l_dp_intarray {\l_lenB_int * (#1-1) + #2}

}


\cs_set:Npn \setDP:nnn #1 #2 #3{

    \intarray_gset:Nnn \l_dp_intarray {\l_lenB_int * (#1-1) + #2} {#3}

}


\NewDocumentCommand \lev{mm} {

    \lev_fn:nn {#1}{#2}

}

\ExplSyntaxOff


\begin{document}

Distance of kitten and sitting: \lev{kitten}{sitting}

\end{document}