小编Hyn*_*dil的帖子

Haskell尾递归如何工作?

我写了这段代码,我假设len是尾递归,但仍然会发生堆栈溢出.怎么了?

myLength :: [a] -> Integer

myLength xs = len xs 0
    where len [] l = l
          len (x:xs) l = len xs (l+1)

main = print $ myLength [1..10000000]
Run Code Online (Sandbox Code Playgroud)

haskell tail-recursion

48
推荐指数
2
解决办法
9282
查看次数

如何用任意arity函数组合`not`?

当我有类似的功能

f :: (Ord a) => a -> a -> Bool
f a b = a > b
Run Code Online (Sandbox Code Playgroud)

我想用make函数包装这个函数.

例如,使这样的功能

g :: (Ord a) => a -> a -> Bool
g a b = not $ f a b
Run Code Online (Sandbox Code Playgroud)

我可以像组合一样组合

n f = (\a -> \b -> not $ f a b)
Run Code Online (Sandbox Code Playgroud)

但我不知道怎么做.

*Main> let n f = (\a -> \b -> not $ f a b)
n :: (t -> t1 -> Bool) -> t -> t1 -> Bool …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming function composition

31
推荐指数
4
解决办法
5659
查看次数

erlang rebar escriptize&nifs

如果我自己编写escript,我可以使用nif,但是当我使用rebar escriptize时,无法找到nif函数.我认为这是因为*.so对象没有像束文件那样被打包.这是一个简单的例子;

rebar.config:

{deps, [
   {'jiffy', "", {git, "https://github.com/davisp/jiffy.git", {branch, master}}}
]}.
{escript_incl_apps, [jiffy]}.
%% I tried this to see what happens if the so got in there but didn't help
{escript_incl_extra, [{"deps/jiffy/priv/jiffy.so", "/path/to/my/proj"}]}.
Run Code Online (Sandbox Code Playgroud)

test.erl:

-module(test).

-export([main/1]).

main(_Args) ->
    jiffy:decode(<<"1">>),
    ok.
Run Code Online (Sandbox Code Playgroud)


rebar get-deps compile escriptize ./test

结果是

escript: exception error: undefined function jiffy:decode/1
  in function  test:main/1 (src/test.erl, line 7)
  in call from escript:run/2 (escript.erl, line 741)
  in call from escript:start/1 (escript.erl, line 277)
  in call from init:start_it/1
  in …
Run Code Online (Sandbox Code Playgroud)

erlang rebar erlang-nif

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

Lisp Flavored Erlang - Messaging原语

我已经阅读了所有文档和LFE的大部分来源.所有演示文稿都强调传统lisp角色中的基本lisp - 一般问题解决,Hello world和语法模拟宏.

有谁知道LFE如何处理消息传递原语?要指定更精确的问题,您将如何表达此erlang:

A = 2,  
Pid = spawn(fun()->  
    receive  
        B when is_integer(B) -> io:format("Added: ~p~n",[A+B]);  
        _ -> nan  
    end  
end), 
Pid ! 5.  
Run Code Online (Sandbox Code Playgroud)

然后,你知道,它总结了一些关于添加了一些数字而答案是7的东西.

lisp erlang lfe

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

如何确定几个字符串中最长的相似部分?

根据标题,我试图找到一种方法来以编程方式确定几个字符串之间最长的相似性部分.

例:

  • file:///home/gms8994/Music/t.A.T.u./
  • file:///home/gms8994/Music/nina%20sky/
  • file:///home/gms8994/Music/A%20Perfect%20Circle/

理想情况下,我会回来file:///home/gms8994/Music/,因为这是所有3个字符串中最常见的部分.

具体来说,我正在寻找一个Perl解决方案,但任何语言(甚至伪语言)的解决方案都足够了.

评论:是的,仅在开头; 但是有可能在列表中有一些其他条目,这个问题将被忽略.

string algorithm perl similarity

8
推荐指数
2
解决办法
6749
查看次数

Erlang NIF测试 - OS X Lion

我正在尝试在Mac OS X Lion上从Erlang(http://www.erlang.org/doc/man/erl_nif.html)编译NIF测试.我无法编译.我错过了编译器标志吗?这是我得到的错误:

Computer:~ me $ gcc -fPIC -shared -o niftest.so niftest.c -I /usr/local/Cellar/erlang/R14B02/lib/erlang/usr/include/
Undefined symbols for architecture x86_64:
  "_enif_make_string", referenced from:
      _hello in ccXfh0oG.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我也试过这个,-m32但它说没有i386架构.

谢谢!

c erlang gcc erlang-nif

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

使用cowboy和MessagePack在websocket上发送二进制数据

我正在尝试通过WebSocket将来自Cowboy的MessagePack编码消息发送到浏览器,并且接收的数据始终为空或无效.我能够将JS中的二进制数据发送给我的牛仔处理程序,但反之亦然.我正在使用Cowboy 1.0.4和官方msgpack-erlang应用程序.我也msgpack-lite用于我的浏览器中的JavaScript.

例子:

websocket_handler:

websocket_handle({text, <<"return encoded">>}, Req, State) ->
    %% sends encoded message to client. Client is unable to decode and fails
    {reply, {binary, msgpack:pack(<<"message">>)}, Req, State};
websocket_handle({binary, Encoded}, Req, State) ->
    %% Works as expected
    lager:info("Received encoded message: ~p", [msgpack:unpack(Encoded)]),
    {ok, Req, State};
Run Code Online (Sandbox Code Playgroud)

JS:

var host = "ws://" + window.location.host + "/websocket";
window.socket = new WebSocket(host);
socket.binaryType = 'arraybuffer';
socket.onmessage = function(event) {
    var message = msgpack.decode(event.data);
    console.log(message);
};
Run Code Online (Sandbox Code Playgroud)

浏览器在msgpack.min.js中返回错误:

Error: Invalid type: …
Run Code Online (Sandbox Code Playgroud)

javascript erlang websocket messagepack cowboy

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

找不到erl_nif.h

我尝试使用erlang nif,

我做了:

#include <erl_nif.h>
Run Code Online (Sandbox Code Playgroud)

但得到错误:

致命错误:erl_nif.h:没有这样的文件或目录

我在哪里可以找到它?我安装了erlang R14B(erts-5.8.1)

OS Arch linux.

谢谢.

c erlang erlang-nif

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

NIF包装我的多线程C++代码

我有一个C++代码,通过串口实现一个特殊的协议.代码是多线程的,并在内部轮询串行端口并执行自己的循环处理.我想从erlang调用此驱动程序,并从此驱动程序接收事件.我担心的是这个C++代码是多线程的,也是状态的,这意味着当我在驱动程序上调用某个函数时,它会在内部缓存内容,这些内容将在后续的驱动程序调用中使用/需要.我的问题是

1. NIF是否在与我的erlang程序的其余部分相同的操作系统进程中运行,或者NIF是在单独的操作系统进程中启动的?

2.用NIF扭曲这个多线程有状态C++代码是否有意义?

4.如果NIF不是正确的方法,那么让我更好的方法是让Elrang用这个C++代码来回说话.我也更喜欢我的C++代码与我的其他Erlang进程在同一个操作系统进程中,因为它看起来像链接驱动程序是一个选项,但不确定我的C++代码的多线程性质是否可以模型.另外我听说他们可以弄乱elrang调度程序?

erlang erlang-nif

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

我可以假设NULL值作为假吗?

我知道,NULL == (void *)0但提到它可以表示为一个不包含全零的值.困扰我的是,如果这些代码片段对所有代码都是等价的(any_type *):

any_type *val;

if (val) { ... };
Run Code Online (Sandbox Code Playgroud)

if (val != NULL) { ... };
Run Code Online (Sandbox Code Playgroud)

c comparison pointers null-pointer conditional-statements

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