我正在用Python做一些函数式编程,如果我有一个函数可以接受任意数量的参数但没有做任何事情,那么它将非常有用,可以用作一些东西的默认值.我想知道是否有人知道一个人的存在,或者我怎么能自己创造一个.
看到回复后编辑:另外,我是python的新手,所以对异国语法的任何细化都会非常有用.星星是什么意思?
比方说,有一个叫做的课RemoteIdGetter.它从服务器返回一个密钥.但是它只向服务器发出请求,如果密钥不够"新鲜",意味着它最后一次被请求,则大于或等于5分钟(300秒).否则,它返回密钥的本地"缓存"值.
我需要在没有(不 var)改变内部状态 RemoteIdGetter或使用纯函数方法的情况下做到这一点.
它可能看起来像这样:
class RemoteIdGetter {
def key = {
if (!needToAskServer) // return the local "cached" value of the key
else makeRequest
}
def makeRequest = // make a request to a remote server to get the key
def time = // current date-time
def lastUpdatedTime = // the last date-time a key has been updated
// (requested from the server)
def needToAskServer = time - lastUpdatedTime …Run Code Online (Sandbox Code Playgroud) 这些天我是关于javascript中的功能性思考的新手.我的背景主要是Java/Ruby中的OOP.
假设我想在节点中获取用户输入,我可以这样做:
process.stdin.resume();
process.stdin.setEncoding("ascii");
var input_buffer = "";
process.stdin.on("data", function (input) {
input_buffer += input;
});
function process_input()
{
// Process input_buffer here.
do_something_else();
}
function do_something_else()
{
}
process.stdin.on("end",process_input);
Run Code Online (Sandbox Code Playgroud)
我在这里保持明确的状态.实现同样的功能是什么?
我有两个清单:
val list1 = List("asdf", "fdas", "afswd", "dsf", "twea", "rewgds", "werwe", "dsadfs");
val list2 = List();
Run Code Online (Sandbox Code Playgroud)
我想过滤list1和setup2中的所有项目,以便它只包含不包含字母'a'的项目.我知道如何使用命令式编程来完成这项工作,但是如何通过功能编程实现这一目标?
当我尝试
Some(1).flatMap(_ => List(2))
我明白了
error: type mismatch;
found : List[Int]
required: Option[?]
Run Code Online (Sandbox Code Playgroud)
但是做得Some(1).map(_ => List(2)).flatten很好.为什么我在第一种情况下遇到编译错误?
当涉及函数式语言时,我想起了一种在对象列表上调用方法的方法,其中下一个方法调用使用前一个调用的结果作为输入以及下一个列表项.
在Python中,以下代码使用for循环执行相同的操作(在此实例中,它基于整数列表构建二叉树).假设binary_insert将树和整数作为参数.
t = None
for x in [4, 2, 1, 5, 6, 3, 7, 9, 8, 12, 10, 11, 13, 15, 14]:
t = binary_insert(t, x)
print t
Run Code Online (Sandbox Code Playgroud)
基本上我试图记住那种功能应用程序的名称.如果有一个Python等价物,那就太棒了.
我试图在Scala中实现闭包示例,来自Neal Ford在Groovy中的Functional Thinking演示.参见幻灯片#43和44 https://sea.ucar.edu/sites/default/files/Functional_Thinking.pdf
def makeCounter : Unit = {
var localVar = 0
return { localVar += 1 }
}
Run Code Online (Sandbox Code Playgroud)
此代码返回匿名函数.现在我想通过调用这个匿名函数来增加localVar.
我有两个问题:
1.如何调用匿名函数?
2.调用后,如何检查localVar的值是否增加?
首先我尝试了这个 -
val c1 = makeCounter().它抛出以下错误:
错误:Unit类型的makeCounter不带参数
然后我尝试了这个.
val c1 = makeCounter
这没有给出任何错误.仅打印c1:单位=().
然后,
打印(c1)打印(),而c1()给出相同的错误.
我已经用面向对象的语言开发了10多年了(C#和java).但是越来越多的人听到很多人在谈论函数式编程语言:Ruby,Scala,Haskell,......
虽然我已经阅读了很多关于这些编程语言的知识.不幸的是,大多数教程大部分时间都在谈论语法.但我没有找到任何解释这些领域或任何提供这些语言的典型实际应用的语言的教程.
我遇到了很多问题,下面是我脑海中简单问题的简短列表.
它们是独立语言吗?
他们的框架有多强大?
简介:有人可以快速回答我提到的问题,或者甚至更好,您能否通过实际示例为我提供一些教程链接?
先感谢您.
编辑:简化/删除了一些问题
基本上我正在寻找相当于
for (i in 1:nrow(mydata)) {
if(mydata$alive[i]) { mydata$result[i] = mydata$alive_value; }
else { mydata$result[i] = mydata$dead_value; }
}
Run Code Online (Sandbox Code Playgroud)
这将是符合的
mydata$result <- func_if(mydata$alive,mydata$alive_value,mydata$dead_value)
Run Code Online (Sandbox Code Playgroud)
这样的事情存在吗?
我正在阅读皮尔斯的类型和编程语言一书,在关于递归类型的章节中,他提到它们可以用于用类型语言编码动态lambda演算.作为练习,我正在尝试在Haskell中编写该编码,但我无法通过typechecker:
{-# LANGUAGE RankNTypes, ScopedTypeVariables #-}
data D = D (forall x . x -> x )
lam :: (D -> D) -> D
--lam f = D f
lam = undefined
ap :: D -> D -> D
ap (D f) x = f x
--Some examples:
myConst :: D
myConst = lam (\x -> lam (\y -> x))
flippedAp :: D
flippedAp = lam (\x -> lam (\f -> ap f x))
Run Code Online (Sandbox Code Playgroud)
现在,这段代码给了我以下错误信息(我真的不明白):
dyn.hs:6:11:
Couldn't match type `x' …Run Code Online (Sandbox Code Playgroud)