ML本地环境
ML local enviornment
ML 函数,它将接受一个布尔函数和一个值列表,return 列表中满足给定条件的最后一个值,或者 NONE 如果列表中没有值,则
我当前的函数如下所示:
fun last func nil = NONE
| last func L =
let val f =
fun getlast(x) = SOME x
| getlast(x::xs) = getlast xs
in List.filter func L
end;
任何人都可以帮助我调试我的代码并帮助我了解 ML 中的本地环境吗?
你把这个复杂化了一点,不清楚 f
和 getlast
的目的是什么,因为你从未使用过它们(以及 "definition" f
是语法错误)。
如果你在这个函数之外测试你的 getlast
(这通常是个好主意)你会注意到 getlast []
是 SOME []
而 getlast [1,2,3]
是 SOME [1,2,3]
; getlast y
是 SOME y
无论你传递给它什么 y
。
此外,List.filter func L
的结果是'a list
,而不是'a option
,所以它作为last
的定义不是很有用。
在列表 xs
中查找此类元素的一种方法是使用显式递归:
- 如果
xs
为空,则结果为NONE
。
- 如果
xs
不为空,先看xs
的尾部有没有"last element"。
如果有,那就是答案。
如果没有,那么
- 如果
xs
的头像 func
成立,那就是你的答案。
- 否则,结果为
NONE
。
将其翻译成 ML,它可能看起来像这样:
fun last _ [] = NONE
| last f (x::xs) = case last f xs of
NONE => if f x then SOME x else NONE
| result => result
如果您想使用 List.filter
并避免手动递归,请注意列表的最后一个元素是该列表反向的第一个元素:
fun last f xs = case List.rev (List.filter f xs) of
[] => NONE
| y::ys => SOME y
为 ML 或任何新项目创建您自己的环境
$ virtualenv -p python3 env (if you have 2.7,3.5)
$ virtualenv env(only you have 3.5+)
$ source env/bin/activate
$ pip install <packagename>
ML 函数,它将接受一个布尔函数和一个值列表,return 列表中满足给定条件的最后一个值,或者 NONE 如果列表中没有值,则
我当前的函数如下所示:
fun last func nil = NONE
| last func L =
let val f =
fun getlast(x) = SOME x
| getlast(x::xs) = getlast xs
in List.filter func L
end;
任何人都可以帮助我调试我的代码并帮助我了解 ML 中的本地环境吗?
你把这个复杂化了一点,不清楚 f
和 getlast
的目的是什么,因为你从未使用过它们(以及 "definition" f
是语法错误)。
如果你在这个函数之外测试你的 getlast
(这通常是个好主意)你会注意到 getlast []
是 SOME []
而 getlast [1,2,3]
是 SOME [1,2,3]
; getlast y
是 SOME y
无论你传递给它什么 y
。
此外,List.filter func L
的结果是'a list
,而不是'a option
,所以它作为last
的定义不是很有用。
在列表 xs
中查找此类元素的一种方法是使用显式递归:
- 如果
xs
为空,则结果为NONE
。 - 如果
xs
不为空,先看xs
的尾部有没有"last element"。
如果有,那就是答案。
如果没有,那么- 如果
xs
的头像func
成立,那就是你的答案。 - 否则,结果为
NONE
。
- 如果
将其翻译成 ML,它可能看起来像这样:
fun last _ [] = NONE
| last f (x::xs) = case last f xs of
NONE => if f x then SOME x else NONE
| result => result
如果您想使用 List.filter
并避免手动递归,请注意列表的最后一个元素是该列表反向的第一个元素:
fun last f xs = case List.rev (List.filter f xs) of
[] => NONE
| y::ys => SOME y
为 ML 或任何新项目创建您自己的环境
$ virtualenv -p python3 env (if you have 2.7,3.5)
$ virtualenv env(only you have 3.5+)
$ source env/bin/activate
$ pip install <packagename>