我有一个作业问题,要求我告诉两组内容是否相等,而与顺序无关。
例如:(set-equal? (list 1 2 3) (list 3 2 1))是真的
到目前为止,我已经获得了此代码,
(define (set-equal? list1 list2)
(cond
[(and (empty? list1) (empty? list2)) true]
[(and (cons? list1) (empty? list2)) false]
[(and (empty? list1) (cons? list2)) false]
[(and (cons? list1) (cons? list2))
(if (member? (first list1) list2)
(set-equal? (rest list1) list2)
(set-equal? (rest list1) list2))]))
Run Code Online (Sandbox Code Playgroud)
该代码显然不起作用,因为即使两个列表相等,递归也将导致列表1的(空),列表2仍具有数据,从而使最终输出为false。
我认为我应该这样处理:对照list2中的数据检查list1中的数据,如果有相等的数据,则将其从两个列表中删除。然后继续检查,直到两个列表都为空(为真)或一个列表为空且其中一个仍具有数据(输出为false)。问题是,我不知道该如何编码。
谁能给我一些有关解决此问题的提示?
这是漫长的一天,我的大脑很累,所以也许我完全错过了一些东西,但为什么当我运行这条线时,
System.out.println(
DateTimeFormatter.ofPattern("YYYYMMdd")
.withZone(ZoneId.of("UTC"))
.format(Instant.parse("2020-12-31T08:00:00Z"))
)
)
Run Code Online (Sandbox Code Playgroud)
我得到20211231而不是20201231?额外的一年从哪里来?
我的任务是编写一个名为的程序any?,需要输入一个列表和一个参数的过程,然后告诉你该列表中的任何元素是否满足该过程.
例如:(any? odd? (list 2 4 6 8))- >假
我需要在程序中使用foldr.
(define (any? procedure list1)
(foldr (lambda (x y) (if (procedure x) true (any? procedure y))) false list1))
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所做的,但是当我运行该程序时,(any? odd? (list 2 4 6 8))我不断收到错误说"foldr:第三个参数必须是一个列表,给定为false".我认为这是因为空的基本情况变为布尔值false,然后替换为y,这是无效的,因为您需要一个列表来运行递归调用.
有人可以帮助我完成思考过程吗?
可能是一个简单的答案,但我尝试阅读有关 StandardOpenOption 的 javadoc 文档,但我仍然不清楚当我说时会发生什么
Files.write(..., ..., StandardOpenOption.WRITE, StandardOpenOption.CREATE); // Write A
根据一些本地测试,看起来如果文件已经存在,这仍然会覆盖该文件,那么上面和上面有什么区别
Files.write(..., ..., StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.CREATE); // Write B?
此外,我有一个带有两个线程的程序,可以从写入的文件中读取/写入。当我使用 Write B 时,我有时会遇到竞争条件,其中一个线程创建了该文件,而另一个线程在第一个线程正在读取时覆盖该文件,并且出现异常。但是当我使用 Write A 时,我永远不会遇到这种竞争条件。几乎就像它会先锁定文件一样?有人可以解释幕后发生了什么吗?