小编Moe*_*Moe的帖子

如何在Haskell中获得Maybe的"价值"

我对Haskell相对较新,并开始阅读"真实世界Haskell".我只是偶然发现了类型或许有一个关于如何从"Just 1"获得实际值的问题.我写了以下代码:

combine a b c = (eliminate a, eliminate b, eliminate c)
                where eliminate (Just a) = a
                      eliminate Nothing = 0
Run Code Online (Sandbox Code Playgroud)

如果我使用,这可以正常工作:

combine (Just 1) Nothing (Just 2)
Run Code Online (Sandbox Code Playgroud)

但是,如果我将1更改为String,则它不起作用.我想我知道为什么:因为Just 1必须回馈一种类型,在这种情况下,是一种类型eliminate.但是我怎么能改变Int至少与弦乐交易呢?(或者可能有各种类型?)

haskell return-value maybe

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

LuaJIT FFI有多难?

我最近调查了Lua,看起来真的很棒.唯一令人烦恼的是它缺乏(标准)库.但随着JIT编译器出现了一个很好的FFI C接口.

来自java背景,我试图尽可能地避免使用C,所以我的问题是:有任何人对LuaJIT有一些经验,特别是它的FFI接口,以及为几乎没有知识的人设置库有多困难C?

c lua ffi luajit

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

在lua中评估函数参数中的代码块

我不确定如何标题,但请考虑以下lua代码:

print(function ()
    s = ""
    for i = 1, 10 do
      s = s..tostring(i)
    end
    return s
  end)
Run Code Online (Sandbox Code Playgroud)

但是这只打印了函数地址,因为function()返回一个闭包.有没有办法评估匿名函数?就像我可以在附加括号中使用lambda的方案一样?

((lambda ()(display "Hello World")))
Run Code Online (Sandbox Code Playgroud)

当然我知道,我可以事先定义函数并稍后调用它,但我很好奇是否可以在lua中使用它.提前致谢所有回复.

lambda lua anonymous-function

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

从并发编程(语言)中受益?

最近我正试图深入到并发编程的世界.在一开始我认为多核处理器的唯一原因是程序性能的提高.但现在我不再那么肯定了......

考虑到在大多数语言中编写多线程程序是难以理解的事实,许多人倾向于推荐特别设计的语言,如Erlang或Clojure作为并发计算的首选语言.当然,Erlang使编写并发程序变得容易得多,但值得吗?

我在枪战中查找了一些Erlang程序(是的,我知道microbenchmark并没有说太多......)并且很惊讶许多单核C程序甚至超过了四核Erlang程序.

所以我的问题是,Erlang,Clojure等语言有哪些优势?为什么我应该使用一种语言,这使得编写多核程序变得容易,当C/Java中的单核程序更快?

(我忘了提一下,这些问题只与多核机器有关,分布式计算有所不同,我可以在这里看到Erlangs的优势)

concurrency erlang performance clojure

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

Scheme中的递归函数是否总是尾调用优化?

我已经阅读了一些关于Scheme中尾调优化的内容.但我不确定我是否理解尾调用的概念.如果我有这样的代码:

(define (fac n)
  (if (= n 0)
      1
      (* n (fac (- n 1)))))
Run Code Online (Sandbox Code Playgroud)

这可以优化,以便它不会占用堆栈内存吗?或者尾部调用优化只能应用于这样的函数:

(define (factorial n)
    (let fact ([i n] [acc 1])
      (if (zero? i)
          acc
          (fact (- i 1) (* acc i)))))
Run Code Online (Sandbox Code Playgroud)

scheme tail-call-optimization

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

一种具有快速能力的原型语言

作为一名具有强大数学背景的工科学生,我在大学处理这样的问题:

  • (数值)模拟
  • AI问题
  • 机器人
  • 控制系统
  • 还有一些

正如你所看到的,有些只是数字的,有些则需要处理某些符号.目前我正在使用java,但我对它不是很满意(不能确切地说为什么,可能是个人品味)现在我正在寻找一种编程语言,我可以很容易地对新算法进行原型设计,例如在python中,并不关心低级别的东西,但是有必要加快速度,例如并发/并行编程等等(用python编写并用C/C++重写它不是'真的是我更喜欢的选择...)

把它们加起来:

  • 很容易原型,但是
  • 加速算法的能力
  • 没有样板文件的语法,比如java
  • 语法易于阅读(我知道这可能是最多的,但有些语言鼓励你更多...)

我浏览了一些网站,比如http://rosettacode.org/,并选择了2或3个收藏夹:Go,Lisp(也许是Haskell),但欢迎其他推荐

lisp math prototype artificial-intelligence go

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

使用matlabs保存在函数中

是否可以在函数内使用Matlab save命令来存储工作空间变量?

请考虑以下场景:我在Matlab工作区中有一堆变量,并希望在.mat文件中以"a"和"b"开头.当然这有效:

save('test.mat','a*','b*')
Run Code Online (Sandbox Code Playgroud)

但我希望有一个可变的文件名.我写的功能:

function save_with_name(name)
save(name,'a*','b*')
Run Code Online (Sandbox Code Playgroud)

不起作用,因为save_with_name没有看到工作区变量.有没有我可以使用的解决方案?

workspace matlab scope save

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

用闭包模拟python中的静态变量

是否可以在 python 中编写一个函数,它接受一个参数 a 并打印 h+a 的结果,其中 h 是一个局部变量。然后它应该返回自身,h 增加一。

python static closures

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