\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{algorithm}% http://ctan.org/pkg/algorithm
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx
\usepackage[1,2,3,4]{pagesel}
\usepackage{amsmath}
\algnewcommand\algorithmicforeach{\textbf{for each}}
\algdef{S}[FOR]{ForEach}[1]{\algorithmicforeach\ #1\ \algorithmicdo}
\begin{document}
\algdef{SE}[SUBALG]{Indent}{EndIndent}{}{\algorithmicend\ }%
\algtext*{Indent}
\algtext*{EndIndent}
\noindent
\newpage
\begin{algorithm}
\begin{algorithmic}[1]
\Procedure{iterate}{$CART$}
\ForEach{$t \in T$}
\If{$ something2 $}
\Indent
\If{$something3$}
\State $b_{d} = "L"$
\ElsIf{$something4$}
\State $b_{d} = "R"$
\ElsIf{$something4$}
\State $b_{d} = "-"$
\EndIf
\EndIndent
\EndIf
\EndProcedure
由于这种符号会使伪代码变得非常长,因此编写 if/ifelse 语句的更紧凑的方法是什么?
答案1
首先回答你的问题,我会按照下面的图片来表示,它使用了一个函数数组。
伪代码代表了使用计算机语言编写程序的非正式高级描述。伪代码省略了变量声明、内存分配和计算机语言特定语法等细节。然而,级别太高,我们可能会错过重要的细节。伪代码的目标是提供足够的线索,让读者编写一个可行的计算机程序,无论最终使用哪种编程语言来实现它。
图片中的伪代码风格遵循一种特定的风格,我第一次看到从计算角度看素数作者:Crandall。这可以说是英语和 C 类语言的融合(或者 Algol68,如果你需要赞扬的话)。这种混合有望使算法更具可读性,程序员可以轻松地将其更改为她喜欢的语言。Knuth 也使用了类似的风格。如果你对这种风格感兴趣,请发布另一个问题,我会发布一些代码。
酸性测试
为了实现你的算法,比如在 LaTeX 中我会这样做
\documentclass{minimal}
\begin{document}
\newcounter{counter}
\def\States{\elt A\elt B\elt C \elt D\elt E}%<-array
\def\GetState#1{
\gdef\elt##1{
\stepcounter{counter}
\ifnum#1=\thecounter State: ->##1$_{\thecounter}$ \fi
}
\States %<return
}
\GetState{2}
\end{document}