问题标签 [funcall]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
lisp - 为什么我们在 Lisp 中需要 funcall?
为什么我们必须使用funcall
Common Lisp 中调用高阶函数?例如,为什么我们必须使用:
而不是更简单的:
来自程序背景,我对此感到有点惊讶,因为我更习惯的语言(例如 Python、C#)不需要区分。特别是,至少在源代码级别,C# 编译器将其转换为类似func.invoke()
.
我看到的唯一问题是,这意味着我们不能再调用全局函数test-func
,因为它会被遮蔽,但这几乎不是问题。
lisp - Common Lisp,“已定义但从未使用”
此函数编译时出现警告,第一行中定义了fn并且从未使用过,第二行中fn是未定义的函数:
为什么?一般解释或链接会很棒。
PD:完整日志:
closures - mapcan,尖锐的报价和关闭
我对 CL 有点陌生,目前正试图围绕mapcan
,#'
和funcall
闭包。这是一个闭包,它将谓词应用于数字n,如果正确,则返回(list n)
,否则nil
:
我知道我需要调用funcall
才能将这个闭包变成一个函数。这工作正常:
现在我尝试将特此创建的函数作为参数传递给 mapcan:
我得到一个编译时错误: (FUNCALL (ALL-THOSE #'EVENP)) is not a legal function name
。
但是,如果我省略#'
以及funcall:
现在我很困惑。我的理解是,在使用符号的函数绑定 (*) 时需要对函数进行尖锐引用,并且在“关闭闭包”时mapcan
需要调用。
是因为并且正在相互抵消,还是为什么我必须在上面的示例中省略它们?提前感谢您的任何回复。funcall
#'
funcall
(*) 我知道在这个例子中我并没有真正可以遵循函数绑定的符号。但是如果我使用匿名函数,mapcan
我仍然需要对它进行尖锐引用:(mapcan #'(lambda ...
recursion - 调试简单的 LISP 函数。
我对 lisp 很陌生,甚至连我的脚都湿透了。我确信有一次,我有一些函数在工作,我将能够在它们的基础上构建并处理更高阶的函数和更复杂的问题。
有人可以在以下代码中指出我的错误。
另外我怎么称呼这个?我有一个我认为可以正常工作的函数,但我无法获得调用它的语法。谢谢你的帮助。
c - 如何在没有 rb_string_eval 的情况下使用 C API 调用 ObjectSpace.each_object?
我目前正在尝试获取一个类的所有实例,我想用它ObjectSpace.each_object
来实现这一点。
这是我在 C 中的实际代码:
但是,我不知道这是否真的是一件好事。我想rb_funcall
改用,这可能是一种更清洁的方法。
我的问题是:
- 比使用更好
rb_funcall
吗string_eval
?(我认为是因为解析器) - 由于似乎不存在,如何
ObjectSpace
在 C API 中检索模块?rb_mObjectSpace
lisp - 比较返回期望值调用函数目录,但在列表上的进程中并非如此
我正在创建一个简单的 elisp 测试器。但是,如下所示,我遇到了错误的行为(我无法理解)。
我认为测试人员应该返回t
测试用例(:eq 'a 'a)
,(:eq (return-symbol) 'a)
因为我的测试人员也自然在以下代码之前。实际上并非如此。
下面的代码已经超出了必要的范围,但在大多数情况下,它是在检查明显的行为。
我认为我的测试人员也应该返回那些预期的返回值。
有什么好主意吗?即使解释这种行为的原因也将有助于改进我的测试人员。如果你能给我一些东西,我将不胜感激。
scheme - 使用 lisp 中的两个命名空间编写测试函数
我开始学习 Lisp 并使用 Lispworks 个人版 6.1.1,在评估基本功能时遇到了问题。我能够在 Scheme 中正确使用它们,但是当我尝试在 Lisp 中评估它们时它们不起作用。
我知道在 Lisp 中每个符号都有两个命名空间。所以我尝试编写简单的程序来组合两个程序。它在 Scheme 中运行良好,但在 Lisp 中存在评估问题。
方案中的代码运行良好并返回 2
用 Lisp 重写的相同代码
lispworks 中的错误是:
试图绑定一个非符号,
(FUNCTION CAR)
.
所以当我尝试(defun test (comp #'car #'cdr))
在听众中进行评估时,我得到了
(FUNCTION CAR)
在函数中用作变量名的非符号TEST
。
我不明白为什么它不能像那样写。我会感谢任何帮助
lisp - 使用 do、if 和 funcall 来定义 (satisfy fun lst),它返回列表中满足函数的项目的列表
我一直在环顾四周,仍然不明白 funcall 是如何工作的。如果有人可以就解决问题的方法给我一个建议,我将不胜感激。我知道“有趣”必须是一个谓词函数,但在那之后我被困住了
顺便说一句,如果在将该项目用作函数的参数时函数返回 true,则该项目满足函数。
common-lisp - Common Lisp - 如何使用关键字参数调用/应用函数?
语境
- 使用像我这样的函数,
(lambda (List arg1 arg2 ... argn))
我可以使用funcall
/apply
使用原始参数调用这些方法,从而修改 lambda 中的列表。 - 对于像我这样的函数,
(lambda (arg1 arg2 ... argn &key List))
我只能将funcall
/apply
与参数的副本一起使用,这意味着我不能在函数内部修改它们。 - 如何使用 2. 中的功能与 1. 中的功能相同?
详细问题
1. 有效的功能
与(lambda (mem arg1 arg2 ... argn))
:
函数可以修改这些列表。
2. 无法修改参数的函数
使用(lambda (arg1 arg2 ... argn &key mem))
,我只能使用原始列表的副本来调用它:
因此我不能再修改程序内存。
3. 如何使 2. 中的功能像 1. 中一样工作?
我怎样才能让它工作?即,使用原始列表而不是副本调用函数。
简化旧代码的示例(如 1.):
完整代码可在https://github.com/AlbertoEAF/advent_of_code_2019/blob/master/common-lisp/day5.lisp找到。
c - C中的嵌套回调函数
我已经编写了一些代码来使用回调调用嵌套函数。但我没有得到预期的输出。
请查看代码:
我也尝试过使用函数指针,但我也得到了与上面相同的输出。