Objective-C中的约束网络

时间:2012-04-30 10:17:05

标签: objective-c macos lisp sicp constraint-programming

我正在Mac OS X 10.7上编写Objective C应用程序,我需要解决算术约束的问题。 例如,我有两个矩形方程,a和b是边长:

P=2(a+b) (perimeter)
A=ab     (area)

我将此问题确定为约束满足问题。 用户应该能够指定a和A,并使解算器计算b和P. 我在http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-22.html#%_idx_3516找到了这个实现,但是我不确定是否有一种干净的方法可以从Objective C调用LISP程序。我正在寻找能够为我提供Objective C接口的东西。求解器,或者可以将LISP程序编译成Objective C库。否则,极简主义的开源约束求解器将满足我的需求。

4 个答案:

答案 0 :(得分:1)

实际上有人在为iOS构建lisp系统。 (免责声明 - 我一生中从未使用过lisp)

这个问题common-lisp-on-iphone-ios指向the funcall blog,其作者在github上有ecl-iphone-builder

这个问题:has-anyone-got-any-code-examples-of-ecl-lisp-for-iphone-development最终在同一个目的地。

希望这对你来说是一个好的开始。

修改

我完全错过了 iOS问题。

但是有人在OSX上运行lisp。这个问题有一些解决方案:what-is-the-best-scheme-or-lisp-implementation-for-os-x

这篇博客:common-lisp-on-mac-os-x更加精彩(对我来说是google的顶端)

答案 1 :(得分:1)

那本书的例子是用Scheme写的,这是Lisp的一种方言(有许多)。这本书有些陈旧,但今天Scheme的大多数实现都能够执行该书中的代码示例。在OSX上运行了一些Scheme的实现,但本书中的示例也很容易移植到Common Lisp - 实际上只有很小的区别。更重要的是,我不认为用C / Obj-C写它们需要那么多时间。本书中的例子是通用编程,对于他们使用的Lisp方言来说并不是特别的。

(Wiki中的文章也有实现的链接,我不想宣传任何特定的一个,以免听起来有偏见 - 此外,我没有太多经验在学术界之外使用它。)

或许,如果您正在寻找用于证明数学定理的通用工具,那么您可以查看Coq - 这是专门针对任务的语言。它也可以在任何Unix或类Unix操作系统上运行。

答案 2 :(得分:0)

如果这是你需要解决的唯一问题,那就更容易了。您可以使用bA

来解决a
b = A / a

然后,您可以使用您发布的第一个等式找到P

答案 3 :(得分:0)

nu编程语言是一种可以与Objective-C集成的Lisp方言,包括嵌入在Objective-C应用程序中。 http://programming.nu/index

我听说过非常好的事情,但从未使用它。

您也可以尝试将该约束求解器应用程序转换为Objective-C。