我有一个阶乘谓词fact(N,F),其中任N或F或两者是有界的数字。
例如,我可以拥有fact(3,F)或fact(N,6)。这是我的谓词,该谓词有效,但我不太了解如何做。我曾经使用过,trace但在理解上仍然有困难。
fact(0,1).
fact(N,F) :-
fact(N1,F1),
N is N1 + 1,
F is N * F1.
Run Code Online (Sandbox Code Playgroud) 下面的代码用于生成两个列表的交集:
unionSet :: Eq a => [a] -> [a] -> [a]
unionSet a b = foldl (\acc x -> if elem x acc then acc else acc ++ [x]) a b
Run Code Online (Sandbox Code Playgroud)
为什么foldl功能有效,但是当我使用foldr它时会产生错误?
我试图理解Haskell中的无点编程,并且我对一些例子提出了疑问,因为我并不真正理解错误发生时给出的解释.
1)我有一个循环函数定义如下:
myCycle :: [a] -> [a]
myCycle = foldr (++) [] . repeat
Run Code Online (Sandbox Code Playgroud)
为什么不起作用myCycle = foldr (++) [] $ repeat?
2)用2添加列表的每个元素,然后添加另一个列表
sum :: [Int] -> [Int] -> [Int]
sum s = zipWith (+) . map (+ 2) $ s
Run Code Online (Sandbox Code Playgroud)
为什么函数有同样的结果sum s = zipWith (+) $ map (+ 2) s?为什么sum l1 l2 = zipWith (+) . map (+ 2) $ l1 $ l2不工作