匿名地图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
我在 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