我已经使用J几个月了,我发现阅读不熟悉的代码(例如我自己没有写的代码)是该语言最具挑战性的方面之一,特别是当它处于默认状态时.过了一会儿,我提出了这个策略:
1)将代码段复制到word文档中
2)从(1)中取出每个操作员并将其放在单独的一行上,使其垂直读取
3)用词汇表页面中的口头描述替换每个操作符
4)从J语法到英语语法的粗略翻译
5)使用翻译来识别与概念相关的组件,并使用换行符分隔它们
6)用普通的英文散文写出(5)中每个组成部分应该做的描述
7)基于(6)写出整个程序应该做什么的描述
8)写出为什么可以说(1)中的代码代表(7)中的设计概念的解释.
虽然我从这个过程中学到了很多东西,但我发现它相当艰巨和耗时 - 特别是如果有人使用我以前从未遇到的概念设计他们的程序.所以我想知道:J社区中的其他人是否有最喜欢的方法来找出晦涩难懂的代码?如果是这样,这些方法的优点和缺点是什么?
编辑:
我需要分解的代码类型的示例如下:
binconv =: +/@ ((|.@(2^i.@#@])) * ]) @ ((3&#.)^:_1)
Run Code Online (Sandbox Code Playgroud)
我自己写了这个,所以我碰巧知道它需要一个数字输入,将它重新解释为一个三元数组,并将结果解释为base-2中一个数字的表示,最多只有一个重复.(例如,binconv 5 =(3 ^ 1)+ 2*(3 ^ 0) - > 1 2 - >(2 ^ 1)+ 2*(2 ^ 0)= 4.)但如果我偶然发现它没有任何先前的历史或文件,弄清楚这是它的作用将是一个非常重要的练习.
在当天,FORTRAN标准委员会审查了一项名为"字母O被认为有害"的技术提案.我曾经能够在网上找到这个提案的文本链接,但是自从我上次查找它以来它似乎已经消失了 - 链接从相关的维基百科页面上消失了,唯一一个谷歌点击了术语是对维基百科的引用.有没有人碰巧知道有关FORTRAN的良好信息库,以便我可以追踪它,甚至更好,有一个指向提案本身的链接?
我刚刚从SourceForge上下载了Haskell和J模式,我无法弄清楚如何使它们与emacs 23进行交互.谷歌搜索会产生emacs 22的详细说明,但看起来已经做了一些变化使得它很难找出我应该坚持源文件的位置.内部文档似乎假设有更多使用emacs内部的经验,而且这个问题已经抵抗了几天的解决方案.有谁知道如何启动和运行这些模式?
编辑:感谢Untwisted提供答案.最终,我真正的问题是:
1)我不知道.emacs对于OSX查找器是不可见的,但是通过终端可见.
2)当我运行emacs实例时,我从未想过可以修改.emacs.
一旦我意识到那些是我的问题,我使用Cx Cf打开〜/ .emacs,复制Untwisted修复的文本,并修改它以反映我的个人文件路径.之后,一切正常.
我正在解决99个Haskell问题,以提高我对该语言的熟练程度.在问题7("展平嵌套列表结构")中,我发现自己想要根据传递给函数的参数类型定义条件行为.也就是说,因为
*Main> :t 1
1 :: (Num t) => t
*Main> :t [1,2]
[1,2] :: (Num t) => [t]
*Main> :t [[1],[2]]
[[1],[2]] :: (Num t) => [[t]]
Run Code Online (Sandbox Code Playgroud)
(即嵌套在不同级别的列表具有不同的数据类型)似乎我应该能够编写一个可以读取参数类型的函数,然后相应地表现.我的第一次尝试就是这样:
listflatten l = do
if (:t l) /= ((Num t) => [t]) then
listflatten (foldl (++) [] l)
else id l
Run Code Online (Sandbox Code Playgroud)
但是当我尝试这样做时,Haskell返回一个解析错误.Haskell是否足够灵活以允许这种类型操作,我是否需要找到另一种方法?
我正在研究一个groovy单元测试类,它包含一组规则,用于判断文件内容是否格式正确.(没有使用适当的规则引擎,它只是利用Groovy的断言功能以一种模糊地类似于规则引擎的方式进行验证.)我在想我可以创建一个名为FireAllRules的方法,如下所示:
public static void FireAllRules(File file)
{
for(def method in Class.getMethods)
{
if(method.name.indexOf("rule" == 0) method.invoke(file);
}
}
Run Code Online (Sandbox Code Playgroud)
我希望循环接收的所有方法都是静态的,我注意到在调试过程中,我的规则方法都没有包含在Class.getMethods()枚举中.理想情况下,我只想循环遍历我个人写入类的方法,而不是通过几十种与java.Object一起出现的无趣的方法进行排序.有没有办法在运行时使用反射迭代这些静态方法?