gpt4 book ai didi

sml - 从日期列表中获取 min 元素(运算符不是函数 [tycon mismatch])

转载 作者:行者123 更新时间:2023-12-04 04:38:20 25 4
gpt4 key购买 nike

我想知道,如何在列表中找到最旧的日期:

fun the_oldest_date(date_list: (int * int * int) list) = 
let
(*it might be useful*)
fun older_date(date1: (int * int * int), date2: (int * int * int)) =
if #1 date1 < #1 date2 andalso
#2 date1 < #2 date2 andalso
#3 date1 < #3 date2
then date1
else date2
in
if null date_list
then NONE
else SOME older_date(hd date_list, the_oldest_date(tl date_list))
end

我不想在这里使用任何库函数,只使用递归和标准 ML 工具。
我得到了错误
Error: operator is not a function [tycon mismatch]
operator: ((int * int * int) * (int * int * int) -> int * int * int) option
in expression:
(SOME older_date) (hd date_list,the_oldest_date (tl date_list))
/usr/lib/smlnj/bin/sml: Fatal error -- Uncaught exception Error with 0

最佳答案

亚历克斯,

您的 old_date 函数无法正常工作。您没有考虑具有相同年份和/或月份的两个日期(即 (1,1,1) 和 (1,1,2))。最后这个函数应该返回 bool不是 (int * int * int) .

找到最大值有点棘手,因此您应该尝试找到列表尾部的最大值,然后将其与头部进行比较。

我希望这会有所帮助。我的代码是:

fun the_oldest_date(date_list : (int * int * int) list) : (int * int * int) option = 
let
fun older_date(date1:(int * int * int) , date2:(int * int * int)) : bool =
if #1 date1 < #1 date2
then true
else if #1 date1 = #1 date2
then if #2 date1 < #2 date2
then true
else if #2 date1 = #2 date2
then if #3 date1 < #3 date2
then true
else false
else false
else false
in
if null date_list
then NONE
else
let
val prevMax = the_oldest_date(tl date_list)
in
if prevMax = NONE
then SOME(hd date_list)
else if older_date(hd date_list, valOf prevMax)
then SOME(hd date_list)
else prevMax
end
end

关于sml - 从日期列表中获取 min 元素(运算符不是函数 [tycon mismatch]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19342769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com