0

我有一个巨大的 lisp 函数,我想在我的 c++ 应用程序中使用它。这个函数是使用决策树算法生成的。

我对如何轻松地将其合并到我的代码中没有一个好主意。我不想使用任何外部库,也不想用树和树叶制作类。另外,我想让它易于加载,这就是为什么我首先考虑在一个大的 if-then 函数中编译它。

如果有人知道如何以一种漂亮的方式使其可编译,请告诉我。如果您不知道我想做什么,或者没有任何想法,那么请不要发布任何内容。

这是 lisp 函数的示例。它大约有 10.000 行。

((prev_is_pause is 0)
 ((prev_prev_gender is d)
  ((houses_from_month_start < 1.9)
   ((houses_from_month_start < 0.1)
    ((customer_numsegs < 3.6)
     ((customers_from_company_start < 6)
      ((prev_jobtype is n)
       ((next_hairtype is -)
        ((0.0332597 0.109037))
        ((0.0535314 0.143047)))
       ((called_houses_from_month_end < 3.5)
        ((next_next_single is +)
         ((0.0682613 0.200642))
         ((month_numhouses < 8.3)
          ((0.0631857 0.11954))
          ((0.0737018 0.165414))))
        ((0.0442889 0.225281))))
      ((0.075459 0.110669)))
     ((next_garden is 2)
      ((0.0726842 0.152881))
      ((prev_jobtype is n)
       ((0.0458975 0.12033))
       ((next_customerbegin_jobtype is s)
        ((0.0246754 0.0992865))
        ((prev_prev_talks is aI)
         ((0.0240179 0.0708011))
         ((0.0238049 0.0894625)))))))
    ((prev_birthplace is a)
     ((next_invoice is ".")
      ((company_numcustomers < 13)
       ((called_houses_from_month_end < 2.4)
        ((next_talks is t)
         ((0.0586338 0.13392))
4

2 回答 2

1

你有两个选择:

  • 使用 Lisp 作为嵌入在 C++ 应用程序中的脚本语言,然后将函数作为脚本运行。请参阅此答案以查找一些用于此类任务的 C++ 库。
  • 用 C++ 完全翻译你的 lisp 函数。显然,您已将数据和代码放在同一个函数中。您应该将其分开,将数据放入您将加载的文件中,然后使算法更清晰。不要忘记将算法分成几个不同的函数......另外,一个 10000 行的函数维护起来很痛苦,所以即使你没有将它翻译成 C++,你也应该像之前所说的那样打破它。如果您确切地知道该功能是什么,那应该不会太难。您可以使用一些 C++11 特性来模拟某种函数式语言。
于 2013-04-06T17:19:32.440 回答
0

另一个选择是使用 CFFI 的回调机制:

http://common-lisp.net/project/cffi/manual/html_node/defcallback.html#defcallback

但这将改变您看待应用程序的方式。

于 2013-04-08T07:31:12.040 回答