【问题标题】:Define functions based on procedures stored in list根据存储在列表中的过程定义函数
【发布时间】:2017-03-11 01:38:37
【问题描述】:

我是 Scheme 和函数式编程的新手,我刚开始写一些更复杂的东西。我想知道是否可以根据存储在列表中的过程来定义函数。

假设我们有以下表示过程 (+ 2 3) 和 (* 3 4) 的其他列表:

'((+ 2 3) (* 3 4))

现在我想写一些可以接受任何表示过程的列表(例如(+ 2 3))并基于它定义一个我以后可以使用的函数。

所以如果我选择 (+ 2 3),我希望声明以下函数:

(define (funct_name) (+ 2 3))

所以基本上,我正在寻找的是一个可以定义其他函数的函数,它必须写在脚本中。所以也许是这样的?

(define (def_functions_fromlist) ls) ;this would define the function  
;corresponding to procedure in ls 

提前谢谢你,如果我在这里看起来太困惑了,我很抱歉。

【问题讨论】:

  • (define (funct_name) (+ 2 3)) 不是函数。你的意思是(lambda () (+ 2 3))
  • @Unlocked 哦...我认为define 定义了一个函数,至少在我的介绍课程中是这样告诉我的。可能有点跑题了,但是这两种表达方式有什么区别呢?
  • (define) 定义了一个变量,但是有一个特殊的形式来定义函数。 (lambda) 是一个函数。 (define (f x) x)(define f (lambda (x) x)) 的简写。当他们说(define) 定义了一个函数时,他们并没有对你撒谎,但它的作用还不止于此。

标签: functional-programming scheme racket


【解决方案1】:

返回一个评估列表的匿名函数,如下所示:

(define (def-prod-from ls)
    (lambda () (eval ls)))

这适用于任何输入,而不仅仅是列表。这可能是个问题,但可能不是。

【讨论】:

  • 谢谢,这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
相关资源
最近更新 更多