C ++如何将此lisp函数引入可编译代码?

时间:2013-04-06 17:03:59

标签: c++ lisp

我想在我的c ++应用程序中使用一个巨大的lisp函数。 使用决策树制作算法生成此函数。

我不知道如何轻松地将其合并到我的代码中。 我不想使用任何外部库,我不想用树和类离开它。另外,我想让它很容易加载,这就是为什么我首先考虑在一个大的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))

2 个答案:

答案 0 :(得分:1)

您有两种选择:

  • 使用Lisp作为嵌入在C ++应用程序中的脚本语言,然后将您的函数作为脚本运行。请参阅this answer以查找用于此类任务的一些C ++库。
  • 在C ++中完全翻译你的lisp函数。显然,您已将数据和代码放在同一个函数中。您应该将它分开,将数据放入要加载的文件中,然后使算法更清晰。不要忘记在几个不同的函数中分离算法...另外,10000行函数是一个难以维护的,所以即使你没有将它转换为C ++,你也应该如前所述打破它。如果你确切地知道这个功能是什么,那就不应该太难了。您可以使用一些C ++ 11功能来模拟一种函数式语言。

答案 1 :(得分:0)

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

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

但这会改变您查看应用程序的方式。