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

我上周进行了一次面试,我从中学到了一些关于python的内容,我不知道(或者是意识到如何使用它们),首先是这个问题的内容是为了分支的目的而使用控制。

所以,例如,如果我们运行:

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

def g():
    # something else.

f() or g()

然后,如果f()计算出一些真实条件,那么返回该值,否则返回g(),并返回其产生的任何值,无论是true还是false。这使我们有能力使用或关键字来实现if语句。

如果f()为true,则f()和g()将返回g()的值,如果g()为false,则f()和g()将返回值。

我被告知,这种(使用或用于分支控制)在诸如lisp(因此是lisp标签)的语言中是常​​见的。我正在关注SICP学习方案,所以我可以看到(或(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实现中,写得更好,除非。相同的时间和vs时间。

所以,要更具体 – 它的功能并不多(事实上,这些东西的共同使用是单面的条件,这是不起作用的);没有优势(在这些语言中,当知道事情被实现为宏时,这些语言变得非常明显 – 例如,大多数或者和实现扩展到一个if);并且任何可能的用例应该使用什么时候,除非你在执行它们,否则最好将它们定义为宏而不是使用它们。

哦,你可以使用它们的组合而不是双面的,但是这将是混乱的丑陋。

http://stackoverflow.com/questions/5474514/use-of-or-as-branch-control-in-fp

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 在FP中使用OR作为分支控制