我只是想知道这里的 XL 变量是什么,它没有在任何地方声明?如果字符串不在列表中,则此函数返回 NONE。否则,返回原始字符串列表,但没有匹配的字符串。
fun same_string(s1 : string, s2 : string) =
s1 = s2
fun all_except_option(s1: string, lst: string list) =
case lst of
[] => NONE
| x::xl => if same_string(s1, x) (* XL HERE ?? *)
then SOME xl
else case all_except_option(s1, xl) of
NONE => NONE
| SOME l => SOME (x::l)
Run Code Online (Sandbox Code Playgroud) 在一个可执行的TCL脚本中,我正在定义一个我想在另一个可执行的TCL脚本中导入的变量.在Python中,可以通过在一个脚本底部使用以下习语来组合库和可执行文件:
# Library
if __name__ == "__main__":
# Executable that depends on library
pass
Run Code Online (Sandbox Code Playgroud)
TCL有同等的东西吗?有Perl.
棕榈星期日是复活节前的星期天.通过以下方式可以实现复活节周日:
use Time::Moment;
use Time::Moment::Adjusters qw(WesternEasterSunday PreviousDayOfWeek);
# 2018-04-01T00:00:00Z
my $easter_sunday = Time::Moment->new(year => 2018)->with(WesternEasterSunday);
Run Code Online (Sandbox Code Playgroud)
找到之前的星期日可以用Time::Moment::Adjusters'PreviousDayOfWeek(7):
Run Code Online (Sandbox Code Playgroud)$adjuster = PreviousDayOfWeek($day);将
$adjuster日期调整为日期之前的给定日期[1 =星期一,7 =星期日]的上一次出现.
但如果我申请这个调整员,我会在五天前得到一个星期二!
# 2018-03-27T00:00:00Z
my $palm_sunday = $easter_sunday->with(PreviousDayOfWeek(7))
Run Code Online (Sandbox Code Playgroud)
由于棕榈周日总是先于复活节周日七天我可以做到这一点Time::Moment的minus_days(7),但因为我想找到一个数字,要简单得多发现使用其他假期的Time::Moment::Adjusters,我真的想找到这个意外的根行为.
SML的新手
我有以下代码返回列表的绝对值。我需要它的类型为 int list -> real list。我应该在哪里放置将其转换为实数的语句,同时将此代码限制为一行?
val myabs = map(fn x => if x >= 0 then x else ~x) [1,~2, 3, ~4];
Run Code Online (Sandbox Code Playgroud) 我制作了一个 Hedgehog 生成器,可以通过以下方式生成任意 256 位值:
genWord256 :: Gen Word256
genWord256 = do
bytes <- Gen.integral (Range.linear 0 31)
let lo = 2 ^ (8 * bytes)
hi = 2 ^ (8 * (bytes + 1))
pred <$> Gen.integral (Range.constant lo hi)
Run Code Online (Sandbox Code Playgroud)
让 size 参数决定数字中的字节数,我认为对我的应用程序很有意义。但是,评估此生成器如何缩小并应用于ceiling . logBase 2此,我的问题是:
为什么刺猬决定强调其初始结果的附近?我是否以某种方式误解了“不受大小参数影响的范围”的含义?( Range.constant) 我会认为这里的任何收缩都必须具有较少的位数。
?> Gen.print genWord256
=== Outcome ===
68126922926972638
=== Shrinks ===
112 -- 7 bits
4035711763 -- 32 bits
106639875637011 -- 47 bits
281474976710655 …Run Code Online (Sandbox Code Playgroud) 我有一个数据结构,
datatype 'a tree = Leaf | Branch of 'a tree * 'a * 'a tree
Run Code Online (Sandbox Code Playgroud)
我想编写一个以某种顺序遍历此树的函数.无论它做什么都没关系,所以它可能是一个treefold : ('a * 'b -> 'b) -> 'b -> 'a tree -> 'b.我可以像这样编写这个函数:
fun treefold f acc1 Leaf = acc1
| treefold f acc1 (Branch (left, a, right)) =
let val acc2 = treefold acc1 left
val acc3 = f (a, acc2)
val acc4 = treefold acc3 right
in acc4 end
Run Code Online (Sandbox Code Playgroud)
但是因为在最后一种情况下我不可避免地有两个分支,所以这不是尾递归函数.
是否有可能创建一个,因为允许扩展类型签名,并且成本是多少?我也想知道它是否值得尝试; 也就是说,它在实践中是否提供任何速度优势?
我有一个问题,我遇到了研究SML.它要求返回类型为int - >('a - >'a).这就是我所做的:
- fn x:int => fn y => y;
val it = fn : int -> 'a -> 'a
Run Code Online (Sandbox Code Playgroud)
如何使返回类型为int - >('a - >'a)其中'a - >'a在括号中?任何帮助将不胜感激,我一直在尝试弄清楚它几个小时,在这里找不到任何相关的东西或在谷歌上搜索.
我正在研究这个问题,其中命题逻辑公式表示为:
datatype fmla =
F_Var of string
| F_Not of fmla
| F_And of fmla * fmla
| F_Or of fmla * fmla
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个返回命题逻辑公式大小的函数。命题变量的大小为 1;逻辑非的大小为 1 加上其子公式的大小;逻辑合取和逻辑析取的大小为 1 加上其子公式的大小。
我将如何尝试解决这个问题?
在Ubuntu上安装了MLton编译器(sudo apt-get install mlton)并且在安装时没有任何问题(貌似).
当我尝试使用它(例如"mlton test.sml")时,它会停留一秒钟,然后什么也不返回.如果我尝试在我正在尝试编译的文件中打印某些东西,那就什么都没有.然而,奇怪的是如果我给它糟糕的ML代码("x = 2",没有val),它会吐出像"未定义变量"等常规错误.
我在这里和其他地方在网上看过,似乎并没有关注我正在经历的事情.也许我只是用错了?
提前致谢.