想象一下,您使用明显的强力算法生成斐波纳契数.如果我知道我想提前生成的Fibonaccis的数量,我可以使用功率连接做这样的事情^::
(, [: +/ _2&{.)^:20 i.2
Run Code Online (Sandbox Code Playgroud)
当Fibonaccis达到某个极限时,我怎么能停下来1e6呢?(我知道如何在函数内部使用while.,但这没什么好玩的.)
我想强调这是关于J的一般性问题,而不是关于斐波那契的具体问题.斐波那契数字不要太过分心.问题的核心是如何在满足某些条件之前继续追加到列表中.
给定以下不同长度的盒装列表\xe2\x80\xa6
\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x820 2 3 4 7 9 11\xe2\x94\x829 7 4 3 2 1\xe2\x94\x821 2 3\xe2\x94\x823 1\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\nRun Code Online (Sandbox Code Playgroud)\n我怎样才能像这样创建一个列表:
\n0 2 3 4 7 9 11 9 7 4 3 2 1 1 2 3 3 1\nRun Code Online (Sandbox Code Playgroud)\n每次我尝试这个时,我都会得到尾随零。我明白为什么会发生这种情况,但这不是我想要的。
\n这不是REBOL特定的问题.你可以用任何语言回答它.
该REBOL语言支持被称为REBOL"方言"领域特定语言的创建说法.我为列表推导创建了这样一种方言,REBOL本身不支持这种方言.
列表推导需要一个好的笛卡尔积算法.
我已经使用元编程来解决这个问题,通过动态创建然后执行一系列嵌套foreach语句.它工作得很漂亮.但是,因为它是动态的,所以代码不是很易读.REBOL不能很好地进行递归.它迅速耗尽堆栈空间和崩溃.因此,递归解决方案是不可能的.
总之,如果可能的话,我想用可读的,非递归的"内联"算法替换我的元编程.解决方案可以使用任何语言,只要我可以在REBOL中重现它.(我可以阅读任何编程语言:C#,C,C++,Perl,Oz,Haskell,Erlang等等.)
我应该强调,这个算法需要支持任意数量的集合才能"加入",因为列表理解可能涉及任意数量的集合.
想像一下,我想利用从1号到3,并形成矩阵,使得每个可能的配对来表示,例如,
1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3
这是我用J制定的一元动词来做到这一点:
($~ (-:@# , 2:)) , ,"0/~ 1+i.y
最初我曾认为,"0/~ 1+i.y这就足够了,但遗憾的是产生了以下输出:
1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3
换句话说,它的形状是3 3 2,我想要一些形状为9的东西.我能想到解决它的唯一方法是将所有数据倒入一个新的形状.我确信必须有一种更简洁的方法来做到这一点.谁知道?
这是我做过的(可能是天真的)方式:
count =: 4 : '# (#~ =&x) y'"1 0 1
换句话说,如果我说4 count 3 4 4 3 4 7 9结果是3,因为4在给定列表中发生了3次.
这很好用,但我想知道J是否提供了一些更简洁的方法来表达这一点.
我对字体和编码有基本的了解,但最近我不得不在我的舒适区之外做一些事情:将角色✖(0x2716"重乘x")变成a CGPathRef.
我使用Core Text CTFontGetGlyphsForCharacters来完成这项工作.我知道a CGGlyph实际上是给定字体支持的字形集的索引.我很快发现这个字形仅由iOS上的极少字体支持,包括Zapf Dingbats,这是我选择的字体.
这是我的问题:我可以使用任何字体的,,只需粘贴它.我在Pages中做了一个小实验,我将pas粘贴到文档中,选择它,然后不断更改字体.我做了类似的程序化实验.字形始终正确显示(并且从不更改).如果这些字体中很少有✖,这是如何工作的?如果给定的字体没有这样的符号,是否有一些"后备字形"(我猜这将是"后备字体")?如果是这样,有没有办法获得这些字形的编程访问?
在我看来,二元钩与没有括号的相同动词具有相同的效果,例如,
2 (+ #) 1 2 3
2 + # 1 2 3
Run Code Online (Sandbox Code Playgroud)
这两者都产生相同的结果:5.我能做些什么我(+ #)不能做+ #什么?
我正在尝试在Swift 3中创建一个null-coalescing赋值运算符.换句话说,而不是这样:
x = x ?? y
Run Code Online (Sandbox Code Playgroud)
我要这个:
x ??= y
Run Code Online (Sandbox Code Playgroud)
Swift 3似乎不喜欢我的运营商.这是它的定义:
infix operator ??= : AssignmentPrecedence
func ??=(lhs: inout Any?, rhs: @autoclosure () -> Any?) {
if lhs != nil { return }
lhs = rhs()
}
var x = 3
x ??= 7 // Cannot convert value of type 'Int' to expected argument type 'inout Any?'.
Run Code Online (Sandbox Code Playgroud)
我没有这样做过@autoclosure.我的理解是优先级组AssignmentPrecedence已经包含assignment声明,所以这不太可能是问题所在.
我怎么能在Swift 3中做到这一点?
在Windows中,我可以使用FindNextChangeNotification API来查看文件或文件夹以进行更改.例如,我可以观看文件夹,并在添加或删除文件时收到通知.
OS X上是否有类似的API?
在另一个问题中,我看到了以下语法:
#[unset!]
那是什么?如果我type? #[unset!]在R3中说,它告诉我unset!,但它并没有解决什么#[]是神秘的.
好奇.
我为各种平台编写应用程序,但主要是OS X和Windows.在这两方面,我受到了测试驱动开发(TDD),SOLID等最近趋势的影响.我发现大多数都是很好的建议.我发现如果我有很好的测试覆盖率,我更有可能根据需要进行重构,因为我更有信心我会在测试中发现重构的任何副作用.
无论如何,所有这一切都引出了我的问题:"经理"单身总是一个坏主意吗?我正在编写一个Cocoa应用程序,它必须处理队列中的大量QuickTime文件.应用程序中只能有一个队列,并且应该可以访问应用程序的多个部分,以便它们可以将项目添加到队列中.我发现最简单的方法是使用单例.现在,我已经注意以可测试的方式编写这个单例,因此TDD不是问题.
在这种情况下,我会用什么替代单身人士?还有哪些其他设计模式可以进行单元测试?(请注意,此问题应视为与语言无关.这是一般的OO和TDD问题.)
参数包是 Swift 5.9 的一个很酷的新功能,但令人惊讶的是,似乎没有太多关于它们的讨论,而且我也没有在 StackOverflow 上看到这个问题的答案。