我正在使用Java编写一个编译器设计项目.完成词法分析(使用jflex),我想知道哪种类似yacc的工具最适合(最有效,最容易使用等)进行语法分析以及原因.
我想知道如何创建一个谓词,将所有结果从一些查询中获取(所以我得到一个结果并按分号直到我得到False)在列表中.
例如,如果我foo(X,[1,2,3]).
在一些Prolog听众中写,假设结果是
X=[11];
X=[22];
False.
Run Code Online (Sandbox Code Playgroud)
我想把所有这些结果都列在一个列表中,所以会发生类似下面的事情.
?-another_foo(X,[1,2,3]).
X=[[11],[22]].
Run Code Online (Sandbox Code Playgroud)
another_foo会以某种方式使用foo创建一个包含foo所有结果的列表.我只是不知道如何.
我用Python制作了一个用于旅行商问题的模因算法.但是,我遇到的所有测试数据(城市之间的距离列表)缺乏最佳解决方案的信息,所以我不知道我的算法得到的全局最优值有多接近.
有没有人知道在哪里可以找到一些已知的最佳解决方案的tsp测试数据(最好是矩阵形式,但一切都很好)?
我正在阅读Haskell教程(Learn You a Haskell),其中作者说懒惰与参考透明度相得益彰.经过更多的阅读和一些搜索,我仍然不明白为什么.请注意,我确实理解参考透明度和懒惰的优点,但是它们在一起令我感到不安.
这两者结合有什么特别的好处吗?
或者也许作者只是想说他们都很高兴并且表达得那么含糊不清?
尝试在map()内进行管道传递时出现意外结果
map(ls(), ~ . %>% get %>% dim)
Run Code Online (Sandbox Code Playgroud)
返回以下消息:
Functional sequence with the following components:
1. get(.)
2. dim(.)
Use 'functions' to extract the individual functions.
Run Code Online (Sandbox Code Playgroud)
我真的不知道functions()将如何获得我想要的结果。
有没有办法用管道和地图做到这一点?
不使用管道
map(ls(), ~ get(dim(.)))
Run Code Online (Sandbox Code Playgroud)
,结果就是我所期望的。
我编写了一个Haskell函数,用于计算给定列表中每个数字的阶乘,并将其打印到屏幕上.
factPrint list =
if null list
then putStrLn ""
else do putStrLn ((show.fact.head) list)
factPrint (tail list)
Run Code Online (Sandbox Code Playgroud)
该功能有效,但我发现第三行有点令人困惑.为什么编译器(GHC)没有报告错误,因为在"putStrLn"(准?)函数之前没有"do"?如果我从第4行省略"do",则会按预期弹出错误.
我对Haskell及其方式都很陌生,所以如果我说的话过于愚蠢,请原谅我.