小编Hug*_*len的帖子

哪些语言支持*递归*函数文字/匿名函数?

现在似乎有不少主流语言支持函数文字.它们也被称为匿名函数,但我不在乎它们是否有名称.重要的是函数文字是一个表达式,它产生一个尚未在别处定义的函数,因此例如在C中,&printf不计算.

编辑添加:如果你有一个真正的函数文字表达式<exp>,你应该能够将它传递给一个函数f(<exp>)或立即将它应用于一个参数,即.<exp>(5).

我很好奇哪些语言可以让你编写递归的函数文字.维基百科的" 匿名递归 "文章没有给出任何编程示例.

我们以递归因子函数为例.

以下是我所知道的:

  • JavaScript/ECMAScript可以用callee:

    function(n){if (n<2) {return 1;} else {return n * arguments.callee(n-1);}}
    
    Run Code Online (Sandbox Code Playgroud)
  • 在语言方面很容易letrec,例如Haskell(称之为let):

    let fac x = if x<2 then 1 else fac (x-1) * x in fac

    Lisp和Scheme中有等价物.请注意,绑定fac是表达式的局部,因此整个表达式实际上是一个匿名函数.

还有其他人吗?

recursion language-features function-literal anonymous-function letrec

16
推荐指数
4
解决办法
3141
查看次数

Excel:Break on Error在用户定义的函数中不起作用

似乎从单元格公式(即"用户定义函数"或UDF)调用VBA代码时,通常的VBA Break On Error不起作用.

我能找到这种行为的唯一地方是在一篇名为"为Excel 2007和Excel Services开发用户定义的函数"的文章中的几行:

错误处理返回#VALUE错误.UDF代码抛出的所有异常都将作为#VALUE错误返回到Excel工作表中.

即使您将错误陷阱设置为"中断所有错误"并单步执行代码**,您也永远不会看到VBA运行时错误对话框 - Excel只是静静地放弃执行而不告诉您出了什么问题.当然,这使得调试比实际需要更加困难.

有一些潜在的解决方法涉及On Error但我宁愿不弄乱我的代码只是为了找出错误被引发的位置.

是否有一些我忽略的Excel/VBA选项会使Break On Error正常工作?我正在使用Excel 2003.

**从单元格调用时进入调试器的唯一方法是设置断点或使用Stop语句

debugging excel vba runtime-error excel-2003 excel-vba

6
推荐指数
1
解决办法
3123
查看次数

从另一个程序执行并捕获一个程序

在C中的win32编程中:

什么是在另一个win32程序中执行win32控制台程序的最佳方法,并让启动执行的程序捕获输出?目前我将程序重定向输出到文件,但我确信我必须能够打开某种管道?

c windows console winapi stdout

5
推荐指数
1
解决办法
437
查看次数

如何以编程方式选择另一个应用程序中的上下文菜单项?

目标应用程序是用Delphi(win32而不是.NET)编写的,并且是封闭源代码.

我想调用的操作称为复制,但没有明显的键盘快捷键.(Ctrl + Insert做错了,Ctrl + C什么都不做)

我可以找到我的目标HWND并说服它打开上下文菜单(它WM_RBUTTONDOWN/UP不响应WM_CONTEXTMENU).从菜单中HWND我甚至可以获得菜单句柄,MN_GETHMENU并找到我想要的菜单项.我只是不知道如何"选择"该项目的细节.菜单是"无模式"的,即无效.它HWND不是拥有的,所以我不知道许多隐藏的TPUtilWindow窗户中哪一个是真正的拥有者 - 否则我可能只是发送它WM_COMMAND而不是弹出菜单,这将是更好的选择.

虽然我确信它有助于各种各样的黑客攻击,但我宁愿不将代码注入目标进程.

以任何语言接受的答案.

delphi winapi contextmenu messages sendmessage

5
推荐指数
1
解决办法
1729
查看次数

如何仅使用一个额外的整数变量对整数列表进行排序?

如何仅使用一个变量对值列表进行排序?

编辑:根据@ Igor的评论,我重新提出了这个问题.

c# java sorting puzzle algorithm

2
推荐指数
1
解决办法
2578
查看次数