如何解决如何在 OCaml 中实现没有“else”的“if”?
我正在尝试在整数列表上实现 List.map,并且我有一个 if 语句检查给定的整数是否满足指定的要求。如果满足要求,我会将整数添加到新列表中。但是,因为如果返回类型不是单元,OCaml 需要 else 语句,所以即使不满足要求,我也被迫添加一些东西。
有谁知道避免这种情况的方法或其他合适的方法吗?
谢谢!
let (--) i j =
let rec aux n acc =
if n < i then acc else aux (n-1) (n :: acc)
in aux j [] ;;
let generatePossibilities(currSum) =
let allPossibilities = 0--100 in
List.map (fun x -> if ((currSum + x) <= 100) then x else ("I don't want to do anything else")) allPossibilities
解决方法
这是不可能的, List<string> totalMessages = new List<string>();
for (int i = 0; i < tobePublishCount; i++)
{
totalMessages.Add($"Index: {i},I am a message");
}
await PublishMessageTogether(eventHubConnectionString,eventHubName,completeMessage);
public async Task PublishMessageTogether(string eventHubConnectionString,string eventHubName,List<string> messagesToPublish)
{
await using (var producerClient = new EventHubProducerClient(_eventHubsConnectionString,_eventHubName))
{
List<Azure.Messaging.EventHubs.EventData> azureEventData = new List<Azure.Messaging.EventHubs.EventData>>();
foreach(var messageToPublish in messagesToPublish)
{
var eventData = new Azure.Messaging.EventHubs.EventData(Encoding.UTF8.GetBytes(message));
azureEventData.Add(eventData);
}
await producerClient.SendAsync(azureEventData);
}
return publishCount;
}
}
表达式的两个分支都应该返回一个值,因为所有 OCaml 表达式的计算结果都必须为一个值。
if
函数是一个单射变换,即对于输入列表中的每个值,在输出列表中都有一个对应的值——一对一的变换。如果您想删除某些元素,那么您正在寻找类型为 List.map
的 List.filter_map
,因此过滤器函数可能会返回 ('a -> 'b option) -> 'a list -> 'b list
(缺少value) 如果您不想映射该值,否则它将返回 None
,例如,
Some x
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。