gpt4 book ai didi

python - 在 FP 中使用 OR 作为分支控制

转载 作者:IT老高 更新时间:2023-10-28 20:53:38 26 4
gpt4 key购买 nike

上周我接受了一次采访,在其中我学到了一些我不知道的关于 python 的东西(或者更确切地说是意识到如何使用它们),首先,这个问题的内容是 的使用或 用于分支控制。

因此,例如,如果我们运行:

def f():
# do something. I'd use ... but that's actually a python object.

def g():
# something else.

f() or g()

然后如果 f() 评估为某个 true 条件,则返回该值,如果不是,则评估 g() 并返回它产生的任何值,无论是否对或错。这使我们能够使用 or 关键字来实现 if 语句。

我们也可以使用 and 这样 f() 和 g() 如果 将返回 g() 的值f() 为真,如果 g() 为假,则 f() 的值。

有人告诉我,这(使用 进行分支控制)在诸如 lisp 之类的语言中很常见(因此有 lisp 标签)。我目前关注 SICP学习方案,所以我可以看到 (or (f x) (g x)) 将返回 (g x) 的值,假设 (f x)#f

我对这种技术是否有任何优势感到困惑。它显然实现了分支控制,但对我来说,内置关键字似乎更不言自明。

我也很困惑这是否是“功能性的”?我对纯函数式编程的理解是你使用这样的结构(我最近的 erlang 实验中的一个例子):

makeeven(N,1) -> N+1;
makeeven(N,0) -> N;
makeeven(N) -> makeeven(N,N rem 2).

或者使用 template meta-programming in C++ 的更好、更复杂的示例(通过 cpp-next.com 发现)。我的思考过程是函数式编程的一个方面归结为 piecewise defined functions in code 的使用。用于分支控制(如果你能管理它,尾递归)。

所以,我的问题:

  • 这是“功能性”吗?看起来是这样,我的面试官说他们有函数式编程的背景,但这与我认为的函数式编程不符。我认为没有理由不能将逻辑运算符作为函数的一部分——它似乎很适合高阶函数的概念。我只是没想到逻辑运算符的使用是函数式程序员实现分支控制的方式。正确的?错误的?我可以看到电路使用逻辑门进行分支控制,所以我猜这是一个类似(相关)的概念?
  • 使用这种技术有什么好处吗?仅仅是语言简洁/语法问题,还是在构建解释器方面对使用这种结构有影响?
  • 这种技术有什么用例吗?还是不经常使用?它完全被使用了吗?作为一个自学成才的人,我以前从未见过它,尽管这本身并不一定令人惊讶。

我很抱歉跳过了这么多语言;我只是想把我对它们的理解联系在一起。随意用提到的任何语言回答。如果我误解了任何定义或遗漏了一些重要的东西,我也深表歉意,因为我从未正式学习过计算机科学。

最佳答案

你的面试官一定有“职能背景”。以前很常见的写法

(or (some-condition) (some-side-effect))

但是在 CL 和支持它的 Scheme 实现中,用 unless 编写要好得多。 and vs when 也是如此。

所以,更具体地说——它不是更实用(事实上,这些东西的常见用途是单方面的条件,一开始就没有功能);没有任何优势(当您知道事物无论如何都是作为宏实现时,这在这些语言中变得非常明显 - 例如,大多数 orand 实现扩展为 如果);并且任何可能的用例都应该使用 whenunless 如果你的实现中有它们,否则最好将它们定义为宏而不是不使用它们。

哦,你可以使用它们的组合来代替两侧的 if,但这会非常难看。

关于python - 在 FP 中使用 OR 作为分支控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5474514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com