debugging - F# 可变列表返回一个错误,指出它不可变
问题描述
我正在尝试在 F# 中实现一个队列。我想到的一种方法是使用可变列表。我相信逻辑没问题,但是当我运行代码时出现错误
/home/runner/main.fs(12,5): error FS0027: This value is not mutable. Consider using the mutable keyword, e.g. 'let mutable queue = expression'.
compiler exit status 1
^[[3;1R
这是我的实现代码
let create_job_list jobCount resultLis =
let resultLis =
[for i in 1..jobCount do yield System.Random().Next(10)]
resultLis
let job_list = create_job_list 10 []
let mutable queue = []
let push x queue =
printfn "%A" x
queue <- (x::queue)
let pop resQueue =
let resQ = resQueue |> List.rev
match resQ with
| head::tail -> printfn "%A" head; queue <- (tail |> List.rev)
| [] -> failwith "No more jobs to do right now."
let rec jobQueue job_list =
match job_list with
| head::tail when head%2=1 -> (push head queue) |> ignore; jobQueue tail
| head::tail when head%2=0 -> (pop queue) |> ignore; jobQueue tail
| _ -> failwith "Empty list"
错误告诉我使用let mutable queue = expression
,但我正在使用let mutable queue = []
我哪里错了?谢谢
解决方案
您已将 queue 声明为可变的,但您将它作为不再可变的参数传递。由于您的queue
变量在 push 和 pop 中可见,因此您不需要将其作为参数。
这应该编译:
let create_job_list jobCount resultLis =
let resultLis =
[for i in 1..jobCount do yield System.Random().Next(10)]
resultLis
let job_list = create_job_list 10 []
let mutable queue = []
let push x=
printfn "%A" x
queue <- (x::queue)
let pop resQueue =
let resQ = resQueue |> List.rev
match resQ with
| head::tail -> printfn "%A" head; queue <- (tail |> List.rev)
| [] -> failwith "No more jobs to do right now."
let rec jobQueue job_list =
match job_list with
| head::tail when head%2=1 -> (push head) |> ignore; jobQueue tail
| head::tail when head%2=0 -> (pop) |> ignore; jobQueue tail
| _ -> failwith "Empty list"
推荐阅读
- javascript - 基于 Result MySQL 和 PHP 的不同颜色的谷歌图表条
- java - 具有以下架构的类的 .yaml 结构应该是什么
- android - 在解压缩 obb 文件之前我必须检查 READ_EXTERNAL_STORAGE 吗?
- powershell - Set-Acl 在 PowerShell v5 中无法按预期工作
- azure - 使用 az cli 创建的服务连接不起作用
- c# - 动态调整用户控件的大小
- spring - 将实体 bean 用于前端是否是一种好习惯
- google-apps-script - 如何允许其他用户调用您的脚本并写入电子表格的受保护范围
- sql - 计算同一张桌子两次
- ruby-on-rails - 1 个错误禁止保存此阶段:项目必须存在