我已经在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中的样子。
答案 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