小编gra*_*ski的帖子

什么是直觉型理论的组合逻辑等价物?

我最近完成了一个大学课程,其中包括Haskell和Agda(一种依赖类型的函数式编程语言),并且想知道是否有可能用组合逻辑替换这些中的lambda演算.使用Haskell,这似乎可以使用S和K组合器,从而使其无点.我想知道Agda的等价物是什么.即,可以在不使用任何变量的情况下制作与Agda等效的依赖类型的函数式编程语言吗?

此外,是否有可能以某种方式用组合器取代量化?我不知道这是巧合,但通用量化例如使类型签名看起来像lambda表达式.有没有办法从类型签名中删除通用量化而不改变其含义?例如:

forall a : Int -> a < 0 -> a + a < a
Run Code Online (Sandbox Code Playgroud)

如果不使用forall可以表达同样的事情吗?

logic haskell types functional-programming agda

86
推荐指数
2
解决办法
4168
查看次数

如何在cmake中添加库路径?

我的项目中有2个文件夹"inc"和"lib",分别有头文件和静态库.我如何告诉cmake分别使用这两个目录进行包含和链接?

c++ cmake

44
推荐指数
3
解决办法
10万
查看次数

为什么函数式编程语言需要垃圾回收?

根据维基百科的说法,从lambda演算到组合逻辑的翻译是微不足道的.连接编程语言可以仅依靠堆栈进行内存分配.

什么阻止GHC将Haskell转换为连接编程语言,例如组合逻辑,然后简单地使用堆栈分配来处理所有事情?

这种翻译是否可行,从而消除了Haskell和OCaml等语言的垃圾收集?这样做有缺点吗?

haskell functional-programming

15
推荐指数
2
解决办法
2065
查看次数

如何在haskell中封装对象构造函数和析构函数

我有Haskell代码需要与C库接口,有点像这样:

// MyObject.h
typedef struct MyObject *MyObject;
MyObject newMyObject(void);
void myObjectDoStuff(MyObject myObject);
//...
void freeMyObject(MyObject myObject);
Run Code Online (Sandbox Code Playgroud)

原始的FFI代码将所有这些函数包装为纯函数unsafePerformIO.这导致了错误和不一致,因为操作的顺序是不确定的.

我正在寻找的是一种处理Haskell中的对象而不诉诸于所有内容的一般方法IO.什么是好的是我可以做的事情,如:

myPureFunction :: String -> Int
-- create object, call methods, call destructor, return results
Run Code Online (Sandbox Code Playgroud)

有没有一个很好的方法来实现这一目标?

c c++ haskell

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

unix socket vs共享内存消息哪个更快

我正在研究一个linux服务器程序,它为每个客户端创建一些共享内存,并使用该共享内存中的消息队列(从代码调用的C++类)来回发送消息.从表面上看,这听起来像是与域套接字相同的使用模式 - 即拥有一个服务器程序,可以从其客户端发送和重新获取有效负载.

我的问题是 - unix域套接字做了多少额外的工作?可以想象,使用消息队列的共享内存比套接字更快,反之亦然?

我的猜测是调用send和recv有一些开销,但我不确定是什么.我可能会尝试对此进行基准测试,只是在我这样做之前寻找一些见解.

c c++ unix sockets linux

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

我应该断言 select() EBADF 失败吗?

我正在尝试修复调用select(). 当select()返回EBADF时,会记录一个错误,然后重新初始化fd集并再次调用select。这会导致日志记录的无限硬循环,在几秒钟内生成千兆字节的日志。

如果我的程序连接到的 TCP 服务器之一进行了不正常的断开连接(例如出现段错误),则会出现此错误。在这种情况下,我理想地希望我的程序删除该 fd 并继续运行(或者如果不可行则关闭)。

我的问题是, select() 是否应该返回 EBADF,或者这是否表明我的程序有错误?即我应该断言 EBADF 失败,否则我应该如何处理它?我会循环遍历 fd 集来查找“坏”文件描述符吗?

c sockets tcp

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

是否有一种引用透明的方式与PHP中的时间一起工作

我试图将时间转换为以下时区,无论代码运行的时间和位置如何:

  • 正在运行的代码的时区
  • AEST(澳大利亚东部标准时间)
  • EDT(纽约东部夏令时)

例如,给定一个unix时间戳,如何使用EDT时区找到新的unix时间戳"同一周的星期一"?我该怎么做,这样它总会得到相同的结果?

php time timestamp-with-timezone

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