我有一堆自动生成的LaTeX代码,其格式为"functionname_2093840289fad1337",即附加了散列的函数的名称.我想通过仅引用我知道的唯一函数名来从文档的其余部分引用这些函数.我想要一个像这样的查找函数:
\hyperdyperlink{functionname}
Run Code Online (Sandbox Code Playgroud)
发出的
\hyperlink{functionname_2093840289fad1337}{functionname}
Run Code Online (Sandbox Code Playgroud)
请注意,我无法计算哈希,但我准备编写一个表,将每个函数名映射到functionname + hash.编写这种函数的最佳方法是什么?
是否可以创建一个包含多个代码块的自定义控件结构before { block1 } then { block2 } finally { block3 }?问题是关于糖部分 - 我知道通过将三个块传递给一个方法可以很容易地实现功能doInSequence(block1, block2, block3).
一个真实的例子.对于我的测试实用程序,我想创建一个这样的结构:
getTime(1000) {
// Stuff I want to repeat 1000 times.
} after { (n, t) =>
println("Average time: " + t / n)
}
Run Code Online (Sandbox Code Playgroud)
编辑:
最后我提出了这个解决方案:
object MyTimer {
def getTime(count: Int)(action : => Unit): MyTimer = {
val start = System.currentTimeMillis()
for(i <- 1 to count) { action }
val time = System.currentTimeMillis() - start
new MyTimer(count, …Run Code Online (Sandbox Code Playgroud) Smalltalk(尤其是Squeak/Pharo)是否具有某种形式的可变函数?
我只是在阅读关于在smalltalk中设计你自己的控制声明的能力,而我是ifTrue的忠实粉丝:ifFalse:我很难想出一个很好的方法来实现任意if if,if else,if else ,...,或其他语句,考虑Variadic函数对实现case语句有多大用处.就像是
假班
ifTrue: aBlock (... elseIf: aBoolean then: aSecondBlock ...) else: aLastBlock
vArgList pairsDo: [:x :y| x ifTrue:[^ (y value)] ].
^ aLastBlock
Run Code Online (Sandbox Code Playgroud) if-statement smalltalk control-structure variadic-functions pharo
catch在Ruby中意味着跳出深层嵌套的代码.在Java中,例如可以用Java try-catch来处理异常,但它被认为是不好的解决方案,而且效率也非常低.在Ruby中我们处理异常begin-raise-rescue,我认为将它用于其他任务也很昂贵.
Ruby是否catch-throw真的是一个更有效的解决方案,begin-raise-rescue还是有任何其他理由使用它来打破嵌套块而不是begin-raise-rescue?
正如另一个我似乎无法找到的StackOverflow答案所述,这种模式在实际的Prolog代码中经常出现:
pred(X) :-
guard(X),
...
pred(X) :-
\+ guard(X),
...
Run Code Online (Sandbox Code Playgroud)
许多人试图将其浓缩
pred(X) :-
(guard(X) ->
...
;
...).
Run Code Online (Sandbox Code Playgroud)
但是众所周知,箭头结构会破坏选择点并且不符合逻辑.
在Ulrich Neumerkel和Stefan Kral的Indexing dif/2中,if_/3提出了一个单调且合乎逻辑的谓词,然而在论文中他们提到了另一个引起我注意的结构:*->.
该*->构造的功能与上面的unsugared guard子句完全相同,因此它似乎非常适合我的用途,因为我不希望有一个必需的具体条件,if_/3而且我不太关心额外的选择点.如果我没有弄错(编辑:我),它提供了相同的语义,if_/3但没有要求在条件谓词中添加"具体化".
然而,在它的SWI文档中,它声称"这种构造很少使用",这对我来说似乎很奇怪.*->在我看来,它比->你在尝试进行纯逻辑编程时更好.有没有理由避免这种结构,或者是否有更好的替代整个保护条款/否定保护条款模式?
if-statement prolog control-structure implication logical-purity
需要使用其他语言的break语句或continue语句的代码可以使用block&return-from和catch/ throw在Common Lisp和Emacs Lisp中完成.然后有代码需要redo声明,或至少最好用redo.和redo语句不必须对循环.我怎么能redo在Lisp中做?
如果redo在Lisp中有一个等价物,我认为它会像这样工作:特殊形式with-redo,它采用符号和形式,并redo采用符号.表格(with-redo 'foo BODY-FORMS...)可以包含(redo 'foo)在其BODY-FORMS中,并将(redo 'foo)控制权转移回BODY-FORMS的开头.
我一直想着......
在开关箱区域break;之后需要die()
例:
switch($i){
case 0:
die('Case without break;');
case 1:
die('Case with break;');
break;
}
Run Code Online (Sandbox Code Playgroud) 运行此代码后:
#include <stdio.h>
int x;
int main(void)
{
printf("%d\n",x);
return 0;
}
int x=5;
Run Code Online (Sandbox Code Playgroud)
我预计输出应该是0.由于程序的顺序控制结构int x;应首先执行然后0打印,最后int x=5;应该执行.但它正在提供输出5.
是怎样的程序访问5了x在printf?
我一直想做这样的事情:
my $block := {
state $n = 0;
say $n++;
last if $n > 3;
};
loop $block;
Run Code Online (Sandbox Code Playgroud)
甚至:
$block.loop;
Run Code Online (Sandbox Code Playgroud)
我不期待这是可能的,但如果是的话肯定会很酷.
我怎样才能找出特定例程的来源?
$ perl6
To exit type 'exit' or '^D'
> &loop.^name
===SORRY!=== Error while compiling:
Undeclared routine:
loop used at line 1
Run Code Online (Sandbox Code Playgroud) 在使用Java或C++进行编程时,有很多次我遇到了一个简单的模式,自定义控件结构可以减少代码中的样板.它类似于:
if( Predicate ){
Action
return Value
}
Run Code Online (Sandbox Code Playgroud)
也就是说,"return if"类型语句.我已经尝试过制作带有签名的功能foo[A,B]( pred:((A,A)=>Boolean), value:Option[B] )但是我最终会检查我是否已经返回了Some或None.我被return声明绊倒了.
是否有继承方式在函数式语言或更具体的Scala中创建这样的控制结构?
编辑:
我的描述并不那么清楚,而且那些试图帮助我的人会感到困惑.我foo不工作的关键原因是它不能使包含函数的评估短路.那是
def intersect( geometry:Geometry, reference:Geometry ):Geometry = {
return_if( withinBounds( geometry, projection ), logToString( logger, "Geometry outside " + projection.toString ), EmptyGeometry() )
return_if( topologicallyCorrect( geometry ), intersect( correct( geometry ), reference )
//rest of the function
}
Run Code Online (Sandbox Code Playgroud)
并且仍允许在内部进行尾递归return_if.
if-statement ×2
scala ×2
c ×1
case ×1
common-lisp ×1
implication ×1
latex ×1
lisp ×1
logic ×1
performance ×1
perl6 ×1
pharo ×1
php ×1
prolog ×1
redo ×1
ruby ×1
scope ×1
smalltalk ×1
throw ×1
try-catch ×1