我尝试在 lambda 演算中制定一些 lambda 表达式。它类似于代码,但我必须使用 align 环境,因为它包含数学符号。我想知道如何更好地制定它的结构?当前的表达式中间有很多不需要的空格,尽管它捕捉到了我想要的一些内容。
\begin{align*}
\text{cell} = & \text{rec} (& \lambda b.&\lambda c. &\lambda m.& \\
& & \text{if} &(\text{get?}&(m), & \\
& & & \text{seq} &(\text{send}&(\text{contents}(m), c), & \text{ready}(b(c))), \\
& & & \text{if} &(\text{set?}&(m), & \\
& & & & \text{ready}&(b(\text{contents}(m))), & \\
& & & & \text{ready}&(b(c)))))
\end{align*}
这就是我想要的
答案1
虽然不是你想要的,但是这样怎么样:
\documentclass{article}
\usepackage{mathtools, amssymb}
\begin{document}
\begin{alignat*}{4}
\text{cell} ={} & \text{rec} ( & & \lambda\mathrlap{ b.\lambda c. \lambda m.} \\
& & & \text{if} &( & \mathrlap{\text{get?}(m),} \\
& & & & & \text{seq} &( & \text{send}(\text{contents}(m), c), \\
& & & & & & & \text{ready}(b(c))), \\
& & & & & \text{if}\:( & & \text{set?}(m),\\
& & & & & & & \text{ready}(b(\text{contents}(m))), \\
& & & & & & & \text{ready}(b(c)))))
\end{alignat*}
\end{document}
答案2
编码有点难,但是最简单而且足够快(这是您所需要的吗?):
\documentclass{article}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{amssymb}
\begin{document}
\begin{align*}
\text{cell} = \text{rec} (&\lambda b.\lambda c.\lambda m.\\
&\text{if} (\text{get?}(m), \\
& \quad \text{seq} (\text{send}(\text{contents}(m), c),\\
& \qquad \quad \text{ready}(b(c))), \\
& \quad\text{if} (\text{set?}(m), \\
&\qquad\text{ready}(b(\text{contents}(m))), \\
&\qquad\text{ready}(b(c)))))
\end{align*}
\end{document}
答案3
如果你使用以下代码,你的代码可能会更好lambdax
如果你使用此链接上的包,https://ctan.org/pkg/lambdax
要使用这个包,你应该从你的 TeX 发行版下载lambdax.sty
(keyparse.sty
在 MikTeX 上答案是肯定的。)
阅读解释有写道这个包提供了 Lambda 表达式。这是你的目标。
这里有一个小例子,取自https://github.com/rogard/lambdax/blob/main/testfiles/lambdax-001.lvt
\documentclass{article}
\usepackage{lambdax}
\begin{document}
\ExplSyntaxOn
\START
\box_new:N \l_tmp_box
\hbox_set:Nn \l_tmp_box{\LambdaX{(#1)}{x}}
\box_use:N \l_tmp_box
%\END
\ExplSyntaxOff
\end{document}