小编zai*_*aig的帖子

Prolog阶乘谓词

我有一个阶乘谓词fact(N,F),其中任NF或两者是有界的数字。

例如,我可以拥有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)

prolog factorial failure-slice

3
推荐指数
1
解决办法
497
查看次数

Haskell foldr和foldl

下面的代码用于生成两个列表的交集:

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
推荐指数
1
解决办法
116
查看次数

Haskell无点编程

我试图理解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不工作

haskell

0
推荐指数
1
解决办法
150
查看次数

标签 统计

haskell ×2

factorial ×1

failure-slice ×1

prolog ×1