相关疑难解决方法(0)

无状态编程的优点?

我最近一直在学习函数式编程(特别是Haskell,但我也经历过关于Lisp和Erlang的教程).虽然我发现这些概念非常具有启发性,但我仍然没有看到"无副作用"概念的实际方面.它有什么实际优势?我试图在功能思维中思考,但是有些情况看起来过于复杂而没有能够以简单的方式保存状态(我不认为Haskell的monad'容易').

是否值得继续深入学习Haskell(或其他纯函数式语言)?功能性或无状态编程实际上是否比程序性更高效?我以后可能继续使用Haskell或其他功能语言,还是应该仅仅为了理解而学习它?

我更关心性能而不是生产力.所以我主要问的是我是否会在函数式语言中比在程序/面向对象/其他方面更高效.

state functional-programming immutability

127
推荐指数
8
解决办法
5万
查看次数

函数式编程语言如何工作?

如果函数式编程语言不能保存任何状态,他们如何做一些简单的事情,比如从用户那里读取输入?他们如何"存储"输入(或存储任何数据?)

例如:这个简单的C语言如何转换为像Haskell这样的函数式编程语言?

#include<stdio.h>
int main() {
    int no;
    scanf("%d",&no);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

(我的问题受到了这篇优秀文章的启发:"名词王国的执行".阅读它让我更好地理解了什么是面向对象的编程,Java如何以一种极端的方式实现它,以及函数式编程语言是如何实现的对比.)

oop paradigms haskell programming-languages functional-programming

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

Swift中的KVO /异常处理

请注意,这个问题写于2014年7月,在swift 1.0之前,我大部分时间忽略了有关swift的任何内容,并试图将代码从objC"转换"为swift.这不是一个好的解决方案,我现在知道的更好.KVO是我们喜欢ObjC的东西,但我强烈建议不要在swift中使用它并在swift中探索一些替代方案. http://blog.scottlogic.com/2015/02/11/swift-kvo-alternatives.html.请记住:如果某些事情很难做到,那么也许并不意味着要做.

作为一个obj-C开发人员,我已经习惯了KVO,好吧,一年,其中一个反复出现的问题是调用的潜在不安全removeObserver:forKeyPath: 我通常用一个@try...@catch条款包围这个...现在快速,我没有找到尝试...抓住东西:)任何线索如何解决问题?

干杯

这是我的意思的一个例子

override func viewDidLoad()
{
    super.viewDidLoad();

    self.summaryTextView.text = self.show?.overview;
    self.title = self.show?.title;
    if(self.show?.imageData)
    {
        self.posterImageView.image = UIImage(data: self.show?.imageData);
    }
    else
    {
        self.posterImageView.image = UIImage(named:"wait");
        show?.addObserver(self, forKeyPath: "imageData", options: NSKeyValueObservingOptions.New, context: nil);
    }

}


override func viewDidDisappear(animated: Bool)
{
     // Will crash if self was not a observer in the first place
     self.show?.removeObserver(self, forKeyPath:"imageData");
}

override func observeValueForKeyPath(keyPath: String!, ofObject object: AnyObject!, change: NSDictionary!, context: CMutableVoidPointer)
{
     self.posterImageView.image = UIImage(data: self.show?.imageData); …
Run Code Online (Sandbox Code Playgroud)

ios swift

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

功能编程,递归游戏状态循环

我打算写一个简单的游戏来测试我对函数式编程的理解.执行主循环的功能方法是递归它,但是当生成越来越多的堆栈帧时,这不会占用内存吗?

谢谢

一个例子来自如何在没有可变状态的情况下做任何有用的事情?

// imperative version
pacman = new pacman(0, 0)
while true
    if key = UP then pacman.y++
    elif key = DOWN then pacman.y--
    elif key = LEFT then pacman.x--
    elif key = UP then pacman.x++
    render(pacman)

// functional version
let rec loop pacman =
    render(pacman)
    let x, y = switch(key)
        case LEFT: pacman.x - 1, pacman.y
        case RIGHT: pacman.x + 1, pacman.y
        case UP: pacman.x, pacman.y - 1
        case DOWN: pacman.x, pacman.y + 1
    loop(new pacman(x, y))
Run Code Online (Sandbox Code Playgroud)

recursion functional-programming

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