- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
上周我接受了一次采访,在其中我学到了一些我不知道的关于 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
也是如此。
所以,更具体地说——它不是更实用(事实上,这些东西的常见用途是单方面的条件,一开始就没有功能);没有任何优势(当您知道事物无论如何都是作为宏实现时,这在这些语言中变得非常明显 - 例如,大多数 or
和 and
实现扩展为 如果
);并且任何可能的用例都应该使用 when
和 unless
如果你的实现中有它们,否则最好将它们定义为宏而不是不使用它们。
哦,你可以使用它们的组合来代替两侧的 if
,但这会非常难看。
关于python - 在 FP 中使用 OR 作为分支控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5474514/
什么时候使用 fp:strict 而不是 fp:precise?如果我想要“更精确”的计算并避免舍入误差,使用前者是否更好?使用这两者背后的启发是什么? 最佳答案 标准 IEEE 754 指定了一种用
我检测到发布版本和调试版本之间的程序结果存在一些差异。经过一些研究,我意识到一些浮点优化导致了这些差异。我已经通过使用 fenv_access pragma 禁用一些关键方法的优化来解决了这个问题。
我在 Built-in Functions — Python 3.7.0 documentation 中阅读了内置函数 iter 的示例 with open('mydata.txt') as fp:
我在 Built-in Functions — Python 3.7.0 documentation 中阅读了内置函数 iter 的示例 with open('mydata.txt') as fp:
我一直在查找一些用 C 语言读取文件的例子,我看到了这两个例子 fgets(buff,255,(FILE*)fp); 和 fgets(buff,255,fp); 假设 fp 是前面定义的文件指针 "F
我是 FP-TS 的新手,但仍然不太明白如何使用 TaskEither .我正在尝试异步读取文件,然后使用 yaml-parse-promise 解析结果字符串。 ==编辑== 我用文件的完整内容更新
我需要在我的 Mac 上编译一个 C 文件,该文件是在仅假设 Linux 和 GCC 环境下编写的。该文件包含一行 if(fp->_IO_write_base == fp->_IO_write_end
for line in fp 和 for line in fp.readlines() 有什么区别? with open(filename, 'r') as fp : for line in
这可能非常无聊,但谷歌搜索确实没有帮助。 在python官方文档中,它经常将文件称为fp: with open(filename, "w") as fp: fp.write() “p”代表什么? 最佳
我想知道如果我设置/fp:fast 而不是 fp:precise 会遇到什么样的错误?我在 MSV10 下工作 我对最大位数为 8 的 double 执行/,*,+,- 运算,例如 1.4379294
我正在使用 Groovy 进行一个项目,我想采用一个员工数组,这样在数组中没有经理跟随他们的下属。原因是我需要将人员添加到数据库中,我不希望分两次完成。 所以,我基本上有: 12
背景: 许多年前,我继承了一个代码库,该代码库使用 Visual Studio (VC++) 标志“/fp:fast”在特定的计算量大的库中生成更快的代码。不幸的是,'/fp:fast' 产生的结果与
我正在尝试从PostgreSQL数据库检索数据,将其转换为视图模型数组,并将数据返回给客户端,在本例中最好是作为单个对象,而不是数组。对于我在错误消息下面列出的代码,我收到以下错误。我是函数式编程领域
所以我尝试将此类 Matlab 代码转换为 C++: ss = 'file.mask' fp = fopen(ss, 'rb'); sx = fread(fp, 1, 'int32') sy = f
我是fp-ts的新手,请帮助我解决问题: 我需要使用异步功能在不同级别上多次记录同一错误。这是我的示例代码: const myProgram = pipe( tryCatch(() => so
我正在尝试在为浏览器编写的库中使用 lodash/fp。我正在使用 Webpack 来打包我的库。 在我的代码中,我当前加载 lodash/fp 如下(ES2015 样式。我使用 Babel 对其进行
我的问题是引用 this post ,具体来说: data Actions a = Actions { actEval :: a, actMap :: (a -> a) -> Act
我正在阅读 FP,我有两个基本问题: FP 表示函数应该接受一个输入并给出单个输出。那么我该怎么办void方法?它不返回任何东西吗? FP 说函数应该是单一的 责任,那我们怎么处理log方法内的语句?
我是 c 初学者,所以我在让用户输入姓氏、逗号和名字时遇到问题。但是它将传递给函数调用 int get_name(FILE *fp) 在我的主要功能中。如果我必须使用参数参数,我就会遇到问题。 示例,
我有一些这样的序列 (100) - (102) - (103) - (104,106) - (108) (101) - (103) (102) - (106) 在 C++ 中有一些有效的实现前缀树或
我是一名优秀的程序员,十分优秀!