小编sid*_*uff的帖子

从C#调用Haskell

我刚刚花了大约一周的时间来搞清楚如何从C#执行C++代码作为我日常工作的一部分.我们花了很长时间才弄明白,但最终的解决方案相当简单.

现在我很好奇......从C#调用Haskell会有多难?(注意:这是 C#调用Haskell ,而不是相反.所以主要的可执行文件是C#.)

如果它真的很难,我不会打扰.但如果它相当容易,我可能不得不玩它...

基本上,我们编写了一些C++代码.在Windows上,它被编译成一个DLL,在Linux上它被编译成一个共享对象(*.so).然后在C#端你做一个DllImport并写一些手动内存管理代码,如果你试图通过任何非常重要的事情.(例如,数组,字符串等)

我知道GHC应该支持在两个平台上构建共享库,但我不确定技术细节.导出内容的语法是什么,调用者是否必须先做一些特殊的事情来初始化DLL?

具体来说:假设存在一个函数foobar :: FilePath -> IO Int32.有人可以把一个小草图放在一起显示:

  • 我需要编写什么Haskell声明来向外界揭示它.
  • 如何告诉GHC构建一个独立的DLL/SO文件.
  • 调用者需要做的任何特殊事情,超出了通常的绑定过程foobar.

我不太担心C#端的实际语法; 我想我或多或少地对此感到困惑.

PS我做过简要介绍hs-dotnet,但这似乎是Windows特定的.(即,不适用于Mono,因此无法在Linux上运行.)

c# haskell ffi

42
推荐指数
2
解决办法
7564
查看次数

n个不同元素上的二叉搜索树的数量

可以从n个不同的元素构造多少个二叉搜索树?我们怎样才能找到一个经过数学验证的公式呢?

示例: 如果我们有3个不同的元素,比如说1,2,3,则有5个二叉搜索树.

在元素1,2,3上的二叉搜索树

algorithm math binary-tree proof binary-search-tree

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

使用递归方程的程序的时间复杂度

我想用递推方程找出程序的时间复杂度.那是 ..

int f(int x)
{
if(x<1) return 1;
 else  return f(x-1)+g(x); 
}
int g(int x)
{
if(x<2) return 1;
 else return f(x-1)+g(x/2);
}
Run Code Online (Sandbox Code Playgroud)

我写了它的递推方程并尝试解决它,但它继续变得复杂

T(n) =T(n-1)+g(n)+c
         =T(n-2)+g(n-1)+g(n)+c+c
         =T(n-3)+g(n-2)+g(n-1)+g(n)+c+c+c
         =T(n-4)+g(n-3)+g(n-2)+g(n-1)+g(n)+c+c+c+c
         ……………………….
        ……………………..
        Kth time …..
        =kc+g(n)+g(n-1)+g(n-3)+g(n-4).. .. . … +T(n-k)

Let at kth time input become 1
Then n-k=1
         K=n-1
Now i end up with this..
T(n)= (n-1)c+g(n)+g(n-1)+g(n-2)+g(n-3)+….. .. g(1)
Run Code Online (Sandbox Code Playgroud)

我无法进一步解决它.如果我们计算这个程序中函数调用的数量,可以很容易地看出时间复杂度是指数级的,但我想用重复证明它.怎么做到呢 ?

在此输入图像描述

在Anwer 1中的解释,看起来正确,我做过类似的工作.

这段代码中最困难的任务是写出它的递归方程.我已经绘制了另一个图,我确定了一些模式,我认为我们可以从这个图中得到一些帮助,可能是可能的递归方程.

对于f(2)

对于f(3)

And I came up with this equation , not sure if it is right ??? …
Run Code Online (Sandbox Code Playgroud)

algorithm recurrence time-complexity asymptotic-complexity

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

C中的变量声明及其内存地址

我创建了一个简单的程序:

#include <stdio.h>

int main()
{
    int s1;
    int s2;
    int s3;

    int *p1, *p2, *p3;

    p1 = &s1;
    p2 = &s2;
    p3 = &s3;

    printf("%d\n%d\n%d", p1, p2, p3);
}
Run Code Online (Sandbox Code Playgroud)

每当我运行这个程序时,它会打印指针的内存地址p1,p2p3有趣的是这些值有不同之处12.我想知道这背后的原因.为什么地址不同12

注意:每次执行程序时都会发生这种情况.

输出:

在此输入图像描述


我在许多类型的变量中测试了相同的程序,我得到的结果是......

当变量是char类型时. 在此输入图像描述


当变量是长类型时 在此输入图像描述


当我声明int数组时,每个数组的大小为1. 在此输入图像描述


当第二个声明的数组的大小为2时,它会获得额外的4字节偏移量. 在此输入图像描述

c memory pointers visual-c++

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

使用递归关系证明函数具有指数运行时?

这是一个简单的C程序:

int f(int n) {
  if(n==0 || n==1) {
    return n;
  } else {
    return 2 * f(n - 1) + 3 * f(n - 2);
  }
} 
Run Code Online (Sandbox Code Playgroud)

该程序具有指数时间复杂度.您可以在此函数调用图中看到f(5):

n = 5

我想表明函数只使用递归方程具有指数复杂性,而不是通过绘制图表和计算函数调用的数量.

我想出的复发关系是

T(n)= T(n-1)+ T(n-2)+ c

扩展给出

T(n)= 2T(n-2)+ T(n-3)+ 2c

但是,我不知道如何进一步解决这个问题.我该如何解决这种递归关系?

c algorithm math recursion big-o

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

高速缓存中的命中和未命中率以及平均时间计算

我正试图解决一个客观类型的问题,来检查.我实际上不知道正确的答案,也不知道如何得到它,需要你的帮助.谢谢 .

问题: 在某个系统中,主存储器访问时间为100 ns.缓存比主内存快10倍,并使用写入协议.如果读取请求的命中率是0.92,并且CPU生成的内存请求的85%用于读取,则剩余的用于写入; 然后考虑读写请求的平均时间是

a)14.62ns

b)348.47ns

c)29.62ns

d)296.2ns

我的工作 ::::

那么,内存访问时间= 100ns

缓存访问时间将= 10 ns(快10倍)

In order to find avg time we have a formula

Tavg = hc+(1-h)M

   where h = hit rate
     (1-h) = miss rate
       c   = time to access information from cache
        M  = miss penalty  (time to access main memory)
Run Code Online (Sandbox Code Playgroud)

直写操作:缓存位置和主存储器位置同时更新.

假设CPU生成的85%请求是读请求,15%是写请求.

Tavg = 0.85(avg time for read request)+ 0.15(avg time for write request)
     = 0.85(0.92*10+0.08*100)+0.15(avg time for write request)
Run Code Online (Sandbox Code Playgroud)

//*0.92是读取请求的命中率,但是没有给出写入请求的命中率?

如果我假设写请求的命中率与读请求的命中率相同,那么,

  = 0.85(0.92*10+0.08*100)+0.15(0.92*(10+100)+0.08*100) …
Run Code Online (Sandbox Code Playgroud)

memory computer-science cpu-usage computer-architecture

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

2 个日期字段之间的 MySQL 查询

我正在尝试创建一个 MySQL 查询,该查询将获取当前日期并将其与表中的 2 个日期字段进行比较,并返回满足该查询的行。

这是我的列 1- [from_date],其类型是日期 2- [to_date] 也包含日期类型

该查询假设返回这些日期之间的行。

这是我的查询

mysql_query("SELECT * FROM location WHERE from_date >= DATE() AND to_date <= DATE()")
Run Code Online (Sandbox Code Playgroud)

我的问题是它不返回任何东西。我应该将列类型切换为 DATETIME 吗?

提前致谢。

php mysql

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

C程序,打印其可执行文件名

假设源代码文件名是test.cpp.编译时,它会生成test.exe文件.当我执行它时,它应该识别它的文件名test.exe并打印它.

我可以使用以下代码获取当前目录中存在的所有文件和目录的列表:

DIR * directory;
struct dirent * direct;
direct = readdir(directory);
Run Code Online (Sandbox Code Playgroud)

但是,如何识别相关的文件名,在这种情况下是哪个"test.exe"

c c++

5
推荐指数
3
解决办法
6731
查看次数

这是在asp.net中存储少量永久数据的最佳方式

我必须永久存储上传的文件版本和以前的文件名和版本,而且,我需要更新和检索该信息,但我没有为此应用程序使用任何数据库.是否可以将数据保存在Web.Config文件中并能够更新?

asp.net file-upload

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