小编Ish*_*eck的帖子

将列表元素作为参数传递给curried函数

这里还是一个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 currying

9
推荐指数
2
解决办法
1万
查看次数

这个Fibonacci序列函数是递归的吗?

考虑以下(Haskell)代码:

fib=0:1:zipWith (+) fib (tail fib)
Run Code Online (Sandbox Code Playgroud)

同事试图断言这不是一个递归函数,因为fib它只是一个用自身定义自己的列表,并且与执行相同操作的函数有某种不同.我认为他吸烟了.

你怎么看?

recursion haskell

9
推荐指数
3
解决办法
1707
查看次数

Cygwin读取输入从尾部-f输入

在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)当特定文本出现在文件中时,如何实现使系统发出蜂鸣声的原始目标?

c cygwin pipe windows-7

6
推荐指数
1
解决办法
1535
查看次数

跨框架的emacs跟随模式

有没有办法获得你在跟随模式中找到的行为,但是在不同的框架中跨越多个窗口?

我必须使用一些讨厌的遗留代码,它有七个页面块,八层深度嵌套for循环,带有很多goto,它有助于查看尽可能多的代码(为了充分理解和重写它)没有打破其他一切).

我能一次看到的代码越多越好.

emacs frame

6
推荐指数
1
解决办法
340
查看次数

Unix C - 便携式WEXITSTATUS

我正在尝试获取子进程的退出代码.在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)

c unix openbsd portability freebsd

6
推荐指数
1
解决办法
4039
查看次数

有没有一种功能性的方法来做到这一点?

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)

当我不知道列表的嵌套程度时,这是我能想到的唯一方法.

python sequences

5
推荐指数
2
解决办法
360
查看次数

system() 的退出代码不符合预期

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)

第一次调用表明我没有失败,但返回代码看起来与我从手册页中读取的内容完全不同。我做错了什么?

c linux freebsd

5
推荐指数
1
解决办法
3327
查看次数

emacs shell:输入一次,到处运行

在emacs中,我希望打开多个shell,输入一次命令,并让它在每个shell中运行 - 类似于multixterm(http://freecode.com/projects/multixterm)的方式.

emacs ecl eshell terminal-emulator

4
推荐指数
1
解决办法
183
查看次数

emacs lisp - eval意外地与eval-print-last-sexp不同

请原谅我的冗长.我不确定如何描述我的情况.

鉴于以下......

(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))

问题是:

  1. 为什么(eval-print-last-sexp)的行为与使用(eval)不同?
  2. 如何在不必评估缓冲区中生成的defun的情况下获取"plusser"函​​数?我希望能够(mapcar#'eval(mapcar#'makeplusser'(三四)))或其他东西,但这不符合我的预期.

lisp emacs

4
推荐指数
2
解决办法
333
查看次数

将高阶函数从Python转换为Haskell

我有以下代码:

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中做到这一点,还是我在做梦?

python haskell higher-order-functions

2
推荐指数
1
解决办法
364
查看次数

节点回调; 其他阻止vs返回

我经常看到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)

callback flow-control node.js

1
推荐指数
1
解决办法
382
查看次数