这里还是一个Haskell新手.我知道这足以让我自己陷入错误假设的困境.如果我有以下功能......
quadsum w x y z = w+x+y+z
Run Code Online (Sandbox Code Playgroud)
我想要一个可以获取列表的函数,将每个元素用作指定函数中的参数quadsum,并返回一个curried函数供以后使用.
我一直在努力尝试......
magicalFunctionMaker f [] = (f)
magicalFunctionMaker f (x:xs) = magicalFunctionMaker (f x) xs
Run Code Online (Sandbox Code Playgroud)
希望能够做到这一点......
magicalFunctionMaker (quadsum) [4,3,2]
Run Code Online (Sandbox Code Playgroud)
获得像...这样的咖喱功能:
(((quadsum 4) 3) 2)
Run Code Online (Sandbox Code Playgroud)
或者,或者,致电:
magicalFunctionMaker (quadsum) [4,3,2,1]
Run Code Online (Sandbox Code Playgroud)
导致...
((((quadsum 4) 3) 2) 1)
Run Code Online (Sandbox Code Playgroud)
这可能吗?我是多么误导?
考虑以下(Haskell)代码:
fib=0:1:zipWith (+) fib (tail fib)
Run Code Online (Sandbox Code Playgroud)
同事试图断言这不是一个递归函数,因为fib它只是一个用自身定义自己的列表,并且与执行相同操作的函数有某种不同.我认为他吸烟了.
你怎么看?
在Windows上使用Cygwin,我希望在服务器日志中发出特定消息的声音通知.我写了以下内容:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *f = fopen("/dev/stdin", "r");
char bar=' ';
if(f==NULL) {
return 1;
}
do {
bar = fgetc(f);
if((bar=='\n') || (bar=='\r')) {
printf("\a");
}
if(bar!=EOF) {
printf("%c", bar);
}
} while(bar!=EOF);
fclose(f);
printf("Done.\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我运行以下命令:
tail -f serverlog | grep myMessage | ./alerty.exe
Run Code Online (Sandbox Code Playgroud)
有时我会收到通知,有时我却没有.
我的问题有两个方面:1)在我的C程序中,错了什么?为什么我不能一直读取管道输入?它引起了我的好奇心,所以我很想知道.
2)当特定文本出现在文件中时,如何实现使系统发出蜂鸣声的原始目标?
有没有办法获得你在跟随模式中找到的行为,但是在不同的框架中跨越多个窗口?
我必须使用一些讨厌的遗留代码,它有七个页面块,八层深度嵌套for循环,带有很多goto,它有助于查看尽可能多的代码(为了充分理解和重写它)没有打破其他一切).
我能一次看到的代码越多越好.
我正在尝试获取子进程的退出代码.在Linux和FreeBSD上,我可以这样:
[0] [ishpeck@kiyoshi /tmp]$ uname
FreeBSD
[0] [ishpeck@kiyoshi /tmp]$ cat tinker.c
#include <stdio.h>
#include <sys/wait.h>
int main(void)
{
FILE *proc = popen("ls", "r");
printf("Exit code: %d\n", WEXITSTATUS(pclose(proc)));
return 0;
}
[0] [ishpeck@kiyoshi /tmp]$ gcc tinker.c -o tinker
[0] [ishpeck@kiyoshi /tmp]$ ./tinker
Exit code: 0
[0] [ishpeck@kiyoshi /tmp]$ grep WEXITSTATUS /usr/include/sys/wait.h
#define WEXITSTATUS(x) (_W_INT(x) >> 8)
Run Code Online (Sandbox Code Playgroud)
但是,在OpenBSD上,我收到编译器的投诉......
[0] [ishpeck@ishberk-00 /tmp]$ uname
OpenBSD
[0] [ishpeck@ishberk-00 /tmp]$ cat tinker.c
#include <stdio.h>
#include <sys/wait.h>
int main(void)
{
FILE *proc = popen("ls", "r");
printf("Exit code: …Run Code Online (Sandbox Code Playgroud) def flattenList(toFlatten):
final=[]
for el in toFlatten:
if isinstance(el, list):
final.extend(flattenList(el))
else:
final.append(el)
return final
Run Code Online (Sandbox Code Playgroud)
当我不知道列表的嵌套程度时,这是我能想到的唯一方法.
system() 函数似乎返回了我从它调用的进程中获得的退出代码的 128 倍。
从手册页:
返回值 错误时返回的值为 -1(例如,fork(2) 失败),命令的返回状态为 other?明智的。
这是我所拥有的。
$ ls tinker.c
tinker.c
$ echo $?
0
$ ls notexisting
ls: cannot access notexisting: No such file or directory
$ echo $?
2
$ cat tinker.c
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("%d\n", system("ls tinker.c"));
printf("%d\n", system("ls notexisting"));
return 0;
}
$ gcc tinker.c -o tinker
$ ./tinker
tinker.c
0
ls: cannot access notexisting: No such file or directory
512
Run Code Online (Sandbox Code Playgroud)
第一次调用表明我没有失败,但返回代码看起来与我从手册页中读取的内容完全不同。我做错了什么?
在emacs中,我希望打开多个shell,输入一次命令,并让它在每个shell中运行 - 类似于multixterm(http://freecode.com/projects/multixterm)的方式.
请原谅我的冗长.我不确定如何描述我的情况.
鉴于以下......
(defun three () 3)
(defun four () 4)
(defun makeplusser (x)
(list 'defun (make-symbol (format "%s+" x)) '(y)
(list '+ (list x) 'y)))
Run Code Online (Sandbox Code Playgroud)
在我的暂存缓冲区中,我键入以下内容然后点击Cj (eval-print-last-sexp) ...
(makeplusser 'three)
Run Code Online (Sandbox Code Playgroud)
哪个让我这个......
(defun three+ (y) (+ (three) y))
Run Code Online (Sandbox Code Playgroud)
...我突出显示,点击Cj,并且能够使用......
(three+ 4) ; => 7
Run Code Online (Sandbox Code Playgroud)
我这样做的时候......
(eval (makeplusser 'four)) ; => four+
Run Code Online (Sandbox Code Playgroud)
它将函数名称" four + " 转储到缓冲区,这使我相信它已被正确地解析.当我尝试使用它时......
(four+ 3)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
调试器输入 - Lisp错误:(void-function four +)(4 + 3)
eval((4 + 3))
问题是:
我有以下代码:
import operator
def stagger(l, w):
if len(l)>=w:
return [tuple(l[0:w])]+stagger(l[1:], w)
return []
def pleat(f, l, w=2):
return map(lambda p: f(*p), stagger(l, w))
if __name__=="__main__":
print pleat(operator.add, range(10))
print pleat(lambda x, y, z: x*y/z, range(3, 13), 3)
print pleat(lambda x: "~%s~"%(x), range(10), 1)
print pleat(lambda a, b, x, y: a+b==x+y, [3, 2, 4, 1, 5, 0, 9, 9, 0], 4)
Run Code Online (Sandbox Code Playgroud)
重要部分:Pleat接受任何函数和任何序列,并将该序列中的第一批元素作为参数传递给接收函数.
有没有办法在Haskell中做到这一点,还是我在做梦?
我经常看到node.js程序员在调用期望回调的函数时,执行此操作:
callSomeThing(arg1, arg2, function (err, data) {
if(err) {
// Handle the error case
} else {
// Proceed normally
}
});
Run Code Online (Sandbox Code Playgroud)
是否有任何技术原因导致他们使用else块而不是在错误情况下返回,或者它只是代码风格的东西?
callSomeThing(arg1, arg2, function (err, data) {
if(err) {
// Handle the error case
return;
}
// proceed normally
});
Run Code Online (Sandbox Code Playgroud)