我试图弄清楚如何使用缺点来做到这一点:
((A . B) . (C . D))
每个利弊细胞中的位置(A . B)和(C . D)位置
我试过这样做,(cons (cons 'a 'b) (cons 'c 'd))但它给了我这个:
((A.B) C . D)
我也试过这个:(cons (cons 'a 'b) (cons (cons 'c 'd) ()))但它给了我这个:
((A . B) (C . D))
知道怎么做到这一点?
我们正在开发一个由Java编写的swing应用程序,它只需要大约128MB的内存,并且在短期内我不会看到需要更多的内存,如4GB.以前我们总是提供3个不同的版本,一个用于32位Windows,一个用于32位Linux,另一个用于64位Linux,安装程序包含JRE.几周之前,任何人都没有使用64位版本,并且报告了OutOfMemoryException,因为该应用程序比32位版本消耗大约40-50%的内存.
我的问题是,如果应用程序永远不需要使用超过4GB的内存,我们是否需要为64位Linux提供64位版本?我们进行了一些快速测试,结果显示32位版本也适用于64位Linux.但我不确定我们可能会有什么缺点,例如性能和/或兼容性问题?
你知道最好的方法吗:
let toTableau2D (seqinit:seq<'a*'b*'c>) =
let myfst = fun (a,b,c) -> a
let myscd = fun (a,b,c) -> b
let mytrd = fun (a,b,c) -> c
let inputd = seqinit |> groupBy2 myfst myscd
Run Code Online (Sandbox Code Playgroud)
必须有一个比重写fst更好的方法..
更新 在pad建议之后,我重写了将之前的'a*'b打包成单个结构我的代码现在看起来像
let toTableau (seqinit:seq<'a*'b>) =
let inputd = seqinit |> Seq.groupBy fst |> toMap
let keys = seqinit |> Seq.map fst |> Set.ofSeq |> List.ofSeq
...
Run Code Online (Sandbox Code Playgroud) 实际上我想要完全理解clojure,特别是符号
(def a 1)
(type a)
;;=>java.lang.Long
(type 'a)
;;=>clojure.lang.Symbol
Run Code Online (Sandbox Code Playgroud)
我知道这type是一个函数,所以它的参数首先被评估,所以我完全理解为什么上面的代码以这种方式工作.在流动的代码中,我决定使用宏来延迟评估
(defmacro m-type [x] (type x))
(m-type a)
;;==>clojure.lang.Symbol
Run Code Online (Sandbox Code Playgroud)
我很好,但我不能理解的是:
(m-type 'a)
;;=>clojure.lang.Cons
Run Code Online (Sandbox Code Playgroud)
为什么'a的类型是缺点
values和list或cons在Racket或Scheme 之间有什么区别?什么时候使用一个比另一个好?例如,如果quotient/remainder返回(cons _ _)而不是(values _ _)?
cons(::)运算符是1)在OCaml和类似语言中编写递归列表函数,以及2)列表上的模式匹配的基本部分.但是,我在Reason的有关cons的文档中找不到任何内容,在REPL中,这会引发错误:
Reason # let myList = [2, 3, 4];
let myList : list int = [2, 3, 4]
Reason # 1 :: myList;
Error: Syntax error
Run Code Online (Sandbox Code Playgroud)
是否有替代cons运营商?
我真的很喜欢perl6和计划.我想知道perl6中的函数是否与方案中的"cons,car,cdr"函数类似?我一直在做的事情很麻烦:
sub cons($a, $aList) { return flat($a, $aList); } # sometimes flat is undesired;
sub car($aList) { return first($aList); }
sub cdr($aList) { return tail($aList.elems - 1); }
Run Code Online (Sandbox Code Playgroud)
谢谢.
有什么区别
(cons 2 3)
Run Code Online (Sandbox Code Playgroud)
和
'(2 . 3)
Run Code Online (Sandbox Code Playgroud)
在Lisp?
我们可以在 F# 中编写3 + 4或(+) 3 4并获得相同的结果,这适用于大多数运算符。
为什么 cons 运算符的::行为不同?例如,如果我跑
(::) 1 [2;3]
我得到
error FS0010: Unexpected symbol '::' in expression
而我想得到 [1;2;3]。
在相关说明中,为什么List.Cons不咖喱?没有类型的内置 cons 函数'T -> 'T list -> 'T list吗?
简单代码:
> (cons null (cons 1 2))
'(() 1 . 2)
> (cons (cons 1 2) null)
'((1 . 2))
Run Code Online (Sandbox Code Playgroud)
最初,我希望结果是一样的。我能想到一些含糊的解释,但也想听听知识渊博的人的强项。
为什么结果不一样?