我有这个功能,应该检查图像的存在,直到他们停止出现,基于他们的标题:
function LoadPictures(){
const PIC_MAX = 12;
var i = 1;
while (i <= PIC_MAX){
$.ajax({url: "pic" + i + ".jpg",
type: "HEAD",
success: function(){
$("body").append("<img src='pic" + i + ".jpg' />");
},
error: function(){
i = PIC_MAX + 1;
}
});
i++;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,当我运行该功能时,我得到的只是空白框.我知道循环根据出现的框数量正确计算了现有图像,但无法加载它们.这是为什么?
我正在研究Haskell,并试图理解如何将currying的概念应用于函数.我理解currying本质上是一种带有多个参数的函数并将函数应用于一个参数的方法,返回一个应用于第二个函数的函数,依此类推......而不会失去任何表达性.我正在研究的一个教程问:
"写一个咖喱版2 * (\x y -> x*y)2 3"
我希望有人可以帮我告诉我如何解决这个问题.提前致谢
编辑:回应两个评论者,我可以看到认识
(\x y -> x*y) :: Num a => a -> a -> a
......是我的第一步.在功能性编程方面我的学习曲线相当缓慢(也是新的SO海报,所以我打破了任何礼仪的借口)......我的下一步是什么?
编辑2:@Mikhail,我看到uncurry应用于lambda表达式的类型会形成某种形式(给定uncurry :: (a -> b -> c) -> (a,b) -> c)
Num a => (a,a) -> a
Run Code Online (Sandbox Code Playgroud) 让我们定义f一个支持currying的函数:
def f(a: Int)(b: Int) = a + b
Run Code Online (Sandbox Code Playgroud)
此代码无法编译
def g= f(1)
<console>:10: error: missing arguments for method f;
follow this method with `_' if you want to treat it as a partially applied function
def g= f(1)
Run Code Online (Sandbox Code Playgroud)
我发现了这2个解决方法:
scala> def h = f(1) _
h: Int => Int
scala> def i : Int => Int = f(1)
i: Int => Int
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么推理引擎需要帮助这样一个微不足道的案例呢?
所以我正在对Haskell进行测试,一个问题说:
让功能成为
lolo g x = ys
where ys = [x] ++ filter (curry g x) ys
Run Code Online (Sandbox Code Playgroud)
然后确定名为lolo的函数的类型.选项是:
a) (a,b) -> Bool -> b -> [(a,b)]
b) (b -> b -> b) -> Bool -> [b]
c) ((b,b) -> Bool) -> b -> [b]
d) (a -> b -> Bool) -> b -> [c]
Run Code Online (Sandbox Code Playgroud)
有人可以解释它是哪一个,为什么?我真的很困惑这个......我不明白的是:
1)咖喱功能只适用于功能吗?不是可能是元组的数据类型?那么你可以推断出g在这种情况下是一个函数吗?如果g和x都是函数怎么办?是否有可能使用咖喱与第n个参数?我只看到咖喱与1参数一起使用.
2)我不太了解的另一件事是ys定义中的递归.所以ys是由ys定义的,但是在这种情况下我没有看到基本情况.它会永远结束吗?也许是过滤函数使递归结束.
3)还在咖喱gx =咖喱(gx)对吧?(这是关于功能应用优先级的问题)
非常感谢
对于这个功能:
plus1 = (+) 1
Run Code Online (Sandbox Code Playgroud)
我可以用 :
Prelude> plus1 3
4
Run Code Online (Sandbox Code Playgroud)
plus1的类型是
plus1 :: Integer -> Integer
Run Code Online (Sandbox Code Playgroud)
如何在这里允许函数参数Integer?在我的函数定义中,定义了Integer函数参数?
我不确定我期望发生什么,但是来自Java,所有参数都需要被定义为方法的一部分,但这里似乎有一些事情在幕后发生?
我喜欢ECMAScript 6允许您编写如下的咖喱函数:
var add = x => y => z => x + y + z;
Run Code Online (Sandbox Code Playgroud)
但是,我讨厌我们需要在咖喱函数的每个参数中加上括号:
add(2)(3)(5);
Run Code Online (Sandbox Code Playgroud)
我希望能够一次将咖喱函数应用于多个参数:
add(2, 3, 5);
Run Code Online (Sandbox Code Playgroud)
我该怎么办?我不在乎性能。
javascript functional-programming currying apply ecmascript-6
我试图创建一个函数来编织两个列表一起例如
[1,3,5]和[2,4]- >[1,2,3,4,5]
我得到了我必须做的基本原则并检查但是我遇到了所需类型的问题
interleave :: ([a],[a]) -> [a]
Run Code Online (Sandbox Code Playgroud)
关于不同数量的参数给出错误.到目前为止,这个版本给了我最少的错误
interleave ([],[]) = []
interleave (xs,[]) = [xs]
interleave ([],ys) = [ys]
interleave (x:xs) (y:ys) = x : y : interleave xs ys
Run Code Online (Sandbox Code Playgroud)
我已经尝试过搞乱参数和输出几次但是我对haskell语法不熟悉所以我真的不知道我哪里出错了
第2部分:我还有一个测试文件,以确保功能是正确的,所以如果我在这之后仍然遇到麻烦(因为我得到类似的输入/输出不匹配导致我改变到我现在拥有的)我也可能会发布该代码以获取帮助
我偶然发现了这个代码高尔夫问题:
给定一个字符串
s和一个n表示索引的整数s,输出第 - 个位置s的字符n被删除.
得票最高的答案(截至本文)是在C#中.
s=>n=>s.Remove(n,1);
Run Code Online (Sandbox Code Playgroud)
这种多重=>语法是什么?它看起来类似于lambda表达式(s,n)=>s.Remove(n,1),但我无法弄清楚如何使用此代码.
我正在尝试编写一个复制函数的函数(并最终修改其程序集)并返回它.这适用于一个级别的间接,但在两个我得到段错误.
这是一个最小(非)工作示例:
#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
#define BODY_SIZE 100
int f(void) { return 42; }
int (*G(void))(void) { return f; }
int (*(*H(void))(void))(void) { return G; }
int (*g(void))(void) {
void *r = mmap(0, BODY_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
memcpy(r, f, BODY_SIZE);
return r;
}
int (*(*h(void))(void))(void) {
void *r = mmap(0, BODY_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
memcpy(r, g, BODY_SIZE);
return r;
}
int main() {
printf("%d\n", f());
printf("%d\n", G()());
printf("%d\n", g()());
printf("%d\n", H()()());
printf("%d\n", h()()()); // This …Run Code Online (Sandbox Code Playgroud) 我是Scala的新手,我刚刚开始学习它,现在尝试一些练习。特别是我对此很难理解。
我了解到这一(f: (A, B) => C)部分,但其余的我不太明白。有人可以解释匿名功能部分之后发生了什么吗?
谢谢!
这是功能:
def curry[A, B, C](f: (A, B) => C): A => (B => C) = a => b => f(a, b)
Run Code Online (Sandbox Code Playgroud)