而不是写作
((x: Double) => (((y: Double) => y*y))(x+x))(3)
Run Code Online (Sandbox Code Playgroud)
我想写点类似的东西
((x: Double) => let y=x+x in y*y)(3)
Run Code Online (Sandbox Code Playgroud)
在Scala中有类似的这种语法糖吗?
在听到最新的Stack Overflow播客后,Peter Norvig的紧凑型Python拼写检查器引起了我的兴趣,所以我决定在Scala中实现它,如果我能用功能Scala成语表达它,还要看看需要多少行代码.
这是整个问题.(我们还不比较代码行.)
(两个注意事项:如果你愿意,你可以在Scala解释器中运行它.如果你需要big.txt或整个项目的副本,它就在GitHub上.)
import scala.io.Source
val alphabet = "abcdefghijklmnopqrstuvwxyz"
def train(text:String) = {
"[a-z]+".r.findAllIn(text).foldLeft(Map[String, Int]() withDefaultValue 1)
{(a, b) => a(b) = a(b) + 1}
}
val NWORDS = train(Source.fromFile("big.txt").getLines.mkString.toLowerCase)
def known(words:Set[String]) =
{Set.empty ++ (for(w <- words if NWORDS contains w) yield w)}
def edits1(word:String) = {
Set.empty ++
(for (i <- 0 until word.length) // Deletes
yield (word take i) + (word drop (i + 1))) ++
(for (i <- 0 until word.length - …Run Code Online (Sandbox Code Playgroud) 我正在尝试学习JavaScript,但我遇到了一个障碍.如果答案很明显并且可以通过简单的搜索获得,我会事先道歉.我是编程和JavaScript的新手,不确定要遵循什么样的查询.
在下面的代码中,该函数从HTML表单中获取值,进行一些处理并将其发回.我测试了输入和输出过程,它正常工作.
function foo() {
var x = parseInt(document.formdata.fieldone.value);
var y = parseFloat(document.formdata.fieldtwo.value);
if (isNaN(y))
{ var z = x; }
else
{ var z = function(x, y) {
if ((y * (x / 100)) < 1) {
return (x + Math.ceil(y * (x / 100))); }
else if ((y * (x / 100)) > 1) {
return (x + Math.round(y * (x / 100))); }
else {
return 0; } } }
var bar = document.getElementById("output");
bar.innerHTML = z; …Run Code Online (Sandbox Code Playgroud) 例如,解决以下问题
http://projecteuler.net/problem=5
我提出了以下解决方案
(defn div [n] (= 0 (reduce + (map #(mod n %) (range 1 21)))))
(take 1 (filter #(= true (div %)) (range 20 1e11 20)))
Run Code Online (Sandbox Code Playgroud)
假设一些高尔夫乐趣,我希望将第一行作为匿名函数合并到第二行.语言支持这个吗?
我正在寻找允许在 python 中内联定义函数或多行 lambda 的最佳食谱。
例如,我想执行以下操作:
def callfunc(func):
func("Hello")
>>> callfunc(define('x', '''
... print x, "World!"
... '''))
Hello World!
Run Code Online (Sandbox Code Playgroud)
define我在这个答案中找到了该函数的示例:
def define(arglist, body):
g = {}
exec("def anonfunc({0}):\n{1}".format(
arglist,
"\n".join(" {0}".format(line) for line in body.splitlines())), g)
return g["anonfunc"]
Run Code Online (Sandbox Code Playgroud)
这是一种可能的解决方案,但并不理想。理想的功能是:
anonfunc更好地隐藏内部结构(例如,在函数范围内没有)以及一些我没有想到的事情。我有一个非常好的实现,完成了上述大部分内容,但不幸的是我失败了。我想知道是否有其他人做过类似的东西。
我很清楚这在 Python 用户中是有争议的,并且被认为是 hack 或 unpythonic。我还知道 python-dev 邮件列表上有关多行 lambda 的讨论,并且故意省略了类似的功能。然而,从同样的讨论中我了解到许多其他人也对这样的功能感兴趣。
我不是在问这是否是一个好主意,而是:既然有人决定实施这个,(要么出于乐趣和好奇,要么出于疯狂,真正认为这是一个好主意,要么被枪指着)如何使匿名define工作尽可能接近def使用Python(2.7或3.x)当前的设施?
更详细地解释一下为什么,这对于 GUI 中的回调来说非常方便:
# gtk example:
self.ntimes = 0
button.connect('clicked', …Run Code Online (Sandbox Code Playgroud) 我想从匿名函数返回值。如何在下面的代码中将返回值分配给 $id 变量?
$(document).on("click", '.delete-component', function(e) {
return 4;
});
//$id in this scope should be equal 4
Run Code Online (Sandbox Code Playgroud) 我有一个函数句柄,可以在任意大小的2d数组上运行:
R2T = @(DL1,DL2) arrayfun(@(DL1,DL2)...
1/(fzero(@(x)fFitObj1(x)./fFitObj2(x)-...
DL1./DL2,[minLim maxLim])) ...
,DL1,DL2) - C1;
Run Code Online (Sandbox Code Playgroud)
这是一个自下而上的细分:
fzero(@(x)fFitObj1(x)./fFitObj2(x)-DL1./DL2,[minLim maxLim])- 该位在间隔上查找所考虑函数的零[minLim maxLim],其中fFitObj1和fFitObj2是之前可用的函数句柄,C1是一些已知的常量并且DL1, DL2被提供.@(DL1,DL2)1/(fzero(...))- fzero允许DL1和DL2从外部提供的包装.arrayfun(@(DL1,DL2)...,DL1,DL2)- 另一个包装器,允许fzero在DL1, DL2作为矩阵提供时逐个元素地正确操作.R2T = @(DL1,DL2) arrayfun(...) - C1;- 另一个允许DL1, DL2从外部提供的包装器.我的问题是有时矩阵DL1, DL2可能包含NaN值,在这种情况下fzero返回以下错误:
Error using fzero (line 242)
Function values at interval endpoints must be finite and real.
Run Code Online (Sandbox Code Playgroud)
这就是为什么我自然想到了可用的 …
matlab anonymous-function lazy-evaluation short-circuiting logical-operators
我如何$greet在这个班级内部打电话?我正在使用 PHP 5.5.4。
<?PHP
class Model
{
public $greet = function($name)
{
printf("Hello %s\r\n", $name);
};
}
$test = new Model();
$test->greet('World');
$test->greet('PHP');
?>
Parse error: syntax error, unexpected '$greet' (T_VARIABLE), expecting function (T_FUNCTION)
Run Code Online (Sandbox Code Playgroud)
也试过这个,
$test = new Model();
call_user_func($test->greet('World'));
call_user_func($test->greet('PHP'))
Run Code Online (Sandbox Code Playgroud)
匿名函数在类外工作正常(直接来自手册)。
<?php
$greet = function($name)
{
printf("Hello %s\r\n", $name);
};
$greet('World');
$greet('PHP');
?>
Run Code Online (Sandbox Code Playgroud)
编辑:我在电话中取出美元符号(我在回答开始时抓住了它。它没有帮助,
call_user_func($test->greet('World'));
call_user_func($test->greet('PHP'));
Run Code Online (Sandbox Code Playgroud)
编辑:
class Model
{
public $greet;
function __construct()
{
$this->greet = function($name)
{
printf("Hello %s\r\n", $name);
};
}
} …Run Code Online (Sandbox Code Playgroud) 假设我想为方法创建一个别名:
def foo = bar(_)
Run Code Online (Sandbox Code Playgroud)
这将警告
匿名函数可转换为方法值
而且我不太确定这是什么意思,因为当我尝试我认为这可能意味着什么时:
def foo = bar
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
缺少方法栏的参数(a:A)
无法解析具有此类签名的参考栏.
我正在移植这个 Python 代码...
with open(filename, 'r') as f:
results = [np.array(line.strip().split(' ')[:-1], float)
for line in filter(lambda l: l[0] != '#', f.readlines())]
Run Code Online (Sandbox Code Playgroud)
……给朱莉娅。我想出了:
results = [map(ss -> parse(Float64, ss), split(s, " ")[1:end-1])
for s in filter(s -> s[1] !== '#', readlines(filename))];
Run Code Online (Sandbox Code Playgroud)
这种移植的主要原因是潜在的性能提升,所以我在 Jupyter notebook 中对两个片段进行了计时:
%%timeit...
12.8 ms ± 44.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)@benchmark返回(除其他外)mean time: 8.250 ms (2.62% GC)。到现在为止还挺好; 我确实得到了性能提升。@time: …python ×3
scala ×3
javascript ×2
alias ×1
clojure ×1
julia ×1
matlab ×1
methods ×1
performance ×1
php ×1