小编AJe*_*Jed的帖子

知道传递函数的参数个数(erlang)

在ERLANG:假设我们有一个函数f(),它将F1作为输入,其中F1是一个函数.有没有办法知道F1的输入参数的数量.

我觉得有一个解决方案,但我不确定.例如:

 -module(high).
 -compile(export_all).

 f1() -> 1.
 f2(X) -> X. 
 f3(X, Y) -> {X,Y}. 

 run(F) -> io:format("F ~p ~n", [F]).
Run Code Online (Sandbox Code Playgroud)

那么,有没有办法让函数run/1知道有关传递函数的信息[主要是传递函数的输入参数的数量].

注意:请注意,这是一个理论问题.注意:应用程序的代码(有趣的,[参数])在开源中可用..这可能是我猜的.

erlang

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

如何在方案中将字符串作为函数名传递?[Scheme中函数名称的动态构造]

问题如下,它可以在http://www.cs.indiana.edu/classes/b551-leak/scheme_practice.html找到.

问题定义:编写一个函数cxr,它是Scheme中提供的car/cdr运算符的泛化.cxr应该取一串"a"和"d"表示要执行的car和cdr操作的序列,并返回一个能够执行该序列的函数.

因此(cxr"ad")相当于函数cadr.

    ((cxr "ad") '(i ii iii iv v vi vii))  ==> ii
    (define sixth (cxr "addddd"))
    (sixth '(i ii iii iv v vi vii))         ==> vi
Run Code Online (Sandbox Code Playgroud)

我的尝试:我使用string-append将cxr"ad"转换为字符串"cadr".[这很容易] ..现在我如何在"cadr"与cadr之间建立链接...我尝试了string->符号,但输出被引用,并且该函数从未被执行. - 那么有什么方法可以取消引用吗?!

真正的问题:如何解决这个问题?


更新:感谢所有人的回答.它们都是正确的,我甚至在发布问题之前就已经解决了这个问题.当输入是(cxr adddd)时,我主要是想找到一种实际调用caddddr的方法... Everbody和caddddr一样功能,但实际上并没有调用cadddr.

也就是说,如何使功能与cadr caddr等具有相同的命名类型.


更新:(我想我找到了解决方案,它如下 - 但正如下面所说,它不适用于更长的时间):

(define cxr 
(lambda (ad l)
   ( (eval (string->symbol (string-append "c" ad "r")))   l)
)
)
Run Code Online (Sandbox Code Playgroud)

scheme mit-scheme

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

关于| erlang 中的运算符。

我们可以通过编写如下内容在 erlang 中创建一个嵌套列表:

 NL = [[2,3], [1]]. 
 [[2,3],[1]]
Run Code Online (Sandbox Code Playgroud)

但是假设我们是这样写的:

 OL = [[2,3]|1].
 [[2,3]|1]
Run Code Online (Sandbox Code Playgroud)

OL还是列表吗?有人可以详细说明OL是什么吗?

erlang

4
推荐指数
1
解决办法
149
查看次数

标签 统计

erlang ×2

mit-scheme ×1

scheme ×1