匿名地图ML版里面让?

ML version of anonymous map inside let?

我在 Scheme 和 Lisp 中学习了如何做一个 let,它包含一个 map,它接受一个匿名 (lambda) 函数和列表,并返回一个 "worked on by the function" 列表或回答。有人可以用 SML 给我看这个的基本版本吗?

更新:

这是一个非常简单的 map 和 Scheme 中的匿名函数组合:

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

生成列表

 ’(5 6 9)

同样,这很常见。

这是一个使用所有三个的 Lisp 函数:

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

数学只是一个序列生成器,a 的值设置为 4 表示序列的第 4 个元素。如果我们问 k 以下哪个值 a_4 为正,-2、-1、0、1 或 2,我们有

(sequence1_v1 '(-2 -1 0 1 2)) ->

(34/65 22/17 10 -2/17 -14/65)

所以前三个是肯定的。 . . .所以是的,Lisp/Scheme 世界经常做这种事情。只是想知道这在 ML 中会是什么样子。

如果您要翻译的一般形式是(在 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