我已经尝试过Lisp(实际上是Scheme)并发现它是一种非常漂亮的语言,我有兴趣学习更多.但是,似乎Lisp从未在严肃的项目中使用过,而且我没有看到它被列为任何职位发布所需的技能.我有兴趣听到任何使用过Lisp或者在"现实世界"中使用它的人,或者谁知道它是否被认为是纯粹的学术语言.
此问题中 myAny函数的代码使用foldr.当谓词满足时,它会停止处理无限列表.
我用foldl重写了它:
myAny :: (a -> Bool) -> [a] -> Bool
myAny p list = foldl step False list
where
step acc item = p item || acc
Run Code Online (Sandbox Code Playgroud)
(请注意,步骤函数的参数已正确反转.)
但是,它不再停止处理无限列表.
我试图在Apocalisp的答案中跟踪函数的执行情况:
myAny even [1..]
foldl step False [1..]
step (foldl step False [2..]) 1
even 1 || (foldl step False [2..])
False || (foldl step False [2..])
foldl step False [2..]
step (foldl step False [3..]) 2
even 2 || (foldl step False [3..])
True || (foldl …
Run Code Online (Sandbox Code Playgroud) 使用printf时,如何在左侧填充带空格的字符串?
例如,我想打印"Hello",前面有40个空格.
另外,我想要打印的字符串由多行组成.我是否需要单独打印每一行?
编辑:为了清楚起见,我想在每一行之前打印40个空格.
我正在编写文本编辑器.在查看其他文本编辑器后,我注意到其中一些是指"软"与"硬"包装.有什么不同?我似乎无法通过搜索找到答案.
虽然我对理解递归没有任何问题,但我似乎无法绕过河内塔问题的递归解决方案.以下是维基百科的代码:
procedure Hanoi(n: integer; source, dest, by: char);
Begin
if (n=1) then
writeln('Move the plate from ', source, ' to ', dest)
else begin
Hanoi(n-1, source, by, dest);
writeln('Move the plate from ', source, ' to ', dest);
Hanoi(n-1, by, dest, source);
end;
End;
Run Code Online (Sandbox Code Playgroud)
我理解基本情况和将问题分解成小块的概念,直到您能够移动单个磁盘.但是,我无法弄清楚非基本情况下的两个递归调用是如何协同工作的.也许有人可以帮助我?谢谢.
我正在攻读考试,我对Unix中的规范与非规范输入/输出的工作原理感到困惑(例如,curses).我知道有一个缓冲区,"行规则"应用于规范输入.这是否意味着缓冲区被旁路用于非规范输入,还是仅仅意味着没有应用线路规则?输入和输出操作的这个过程有何不同?
在我使用的curses程序中演示了规范输入,用户输入的输入是在键入一定数量的字符或经过一定时间后自动输入的.这些事情中的任何一个都被视为"线条学科"还是完全不同于其他事情?
当我尝试定义一个新类型时,我在ghci中收到错误:
Prelude> data Point = Pt Int Int <interactive>:1:0: parse error on input `data' Prelude> let data Point = Pt Int Int <interactive>:1:4: parse error on input `data'
我究竟做错了什么?
我希望客户引用两个地址模型,一个用于帐单地址,另一个用于送货地址.据我了解,外键由其名称决定,如_id.显然我不能将两行命名为address_id(以引用Address表).我该怎么做?
create_table :customers do |t|
t.integer :address_id
t.integer :address_id_1 # how do i make this reference addresses table?
# other attributes not shown
end
Run Code Online (Sandbox Code Playgroud) 我正在使用Real World Haskell的I/O章节.Monads在本书中未讨论另外7章.也就是说,我对I/O的理解充其量是不完整的.
现在我正在尝试理解mapM功能.据我所知,函数"执行"列表中的每个元素必须是"动作"(IO monad).
没有意义的是这个例子.为什么mapM返回的结果与映射相同的参数不同?
Prelude> map (\x -> [x]) [0, 1, 2] [[0],[1],[2]] Prelude> mapM (\x -> [x]) [0, 1, 2] [[0,1,2]]
我经常发现我知道基类的某个属性永远是子类中的某个类型.例如,在下面的示例中,属性obj
将始终是Derived中的NSString对象.但是,我需要此属性是类Base中更通用的id类型.
@interface Base
@property (strong, nonatomic) id obj;
@end
@implementation Base
//@synthesize obj = obj_;
@dynamic obj;
@end
@interface Derived : Base
@property (strong, nonatomic) NSString *obj;
@end
@implementation Derived
@synthesize obj = obj_;
@end
Run Code Online (Sandbox Code Playgroud)
这段代码是否正确?我担心@synthesize会出现两次.这是创建两个属性,还是Derived中的@synthesize声明覆盖Base中的一个?
编辑:在Base中将@synthesize更改为@dynamic更有意义.
编辑:这需要iOS SDK 5.
haskell ×3
c ×1
clojure ×1
combinators ×1
common-lisp ×1
curses ×1
fold ×1
formatting ×1
ghci ×1
input ×1
lisp ×1
map ×1
migration ×1
monads ×1
objective-c ×1
printf ×1
recursion ×1
scheme ×1
unix ×1
word-wrap ×1