里面有ML版本的匿名地图吗?

时间:2018-12-13 21:17:20

标签: anonymous-function sml let

我已经在Scheme和Lisp中学习了如何进行let并将其封装在map中,该map使用匿名(lambda)函数并列出并返回“该函数进行的工作”列表或答案。有人可以在SML中向我显示此版本的准系统吗?

更新:

这是Scheme中非常简单的(map (lambda (x) (+ x 1)) ’(4 5 8)) 和匿名函数组合:

 ’(5 6 9)

产生列表

(defun sequence1_v1 (vallist)
     (let ((a 4))
       (mapcar #'(lambda (val)
                   (/ (+ (* -3 val a) 10) (+ (* (expt val 2) (expt a 2)) 1)))
               vallist)
       ))

再次,这很常见。

这是同时使用这三个函数的Lisp函数:

a

数学只是一个序列生成器,k的值设置为4表示序列的第4个元素。如果我们询问(sequence1_v1 '(-2 -1 0 1 2)) -> (34/65 22/17 10 -2/17 -14/65) 的以下哪个值中a_4为正,-2,-1、0、1或2,我们有

G:\My Drive\myusername:)\Login CSV\IA\nbproject\jfx-impl.xml:1234: Warning: Could not find resource file "C:\home\myusername:)\Downloads\JavaFXMLDatabaseConnector.jar" to copy.

所以前三个是正数。 。 。 。所以是的,Lisp / Scheme世界做了很多这样的事情。只是想知道它在ML中的样子。

1 个答案:

答案 0 :(得分:1)

如果您要翻译的一般格式是(使用Scheme)

(define (name ls)
     (let (<bindings>)
       (map <function> ls)))

然后在SML中看起来几乎完全一样,但标点符号不同:

fun name ls = let <bindings> 
              in 
                  map <function> ls 
              end

匿名函数(lambda (parameters) body)fn parameters => body

(map (lambda (x) (+ x 1)) ’(4 5 8))

在SML中:

map (fn x => x + 1) [4,5,8]

您的Lisp示例,翻译为:

fun sequence1_v1 ls = 
    let val a = 4
    in
        map (fn v => (-3 * v * a + 10) / ((pow(v, 2) * (pow(a,2)) + 1)) ls
    end