我刚刚被介绍给Prolog并且我正在尝试编写一个谓词来查找整数列表的Max值.我需要写一个从开头比较的比较结果.到目前为止,我有:
max2([],R).
max2([X|Xs], R):- X > R, max2(Xs, X).
max2([X|Xs], R):- X <= R, max2(Xs, R).
Run Code Online (Sandbox Code Playgroud)
我意识到R尚未启动,因此无法进行比较.我需要3个参数才能完成此操作吗?
我有一项任务,我需要将列表向右旋转一次.我也有一个约束,我只能使用一个谓词.似乎向左移动非常容易:
([H|T], R) :- append(T, [H], R).
Run Code Online (Sandbox Code Playgroud)
但是,似乎更难以向右旋转并保持约束.这是我的尝试:
rotate([H], H).
rotate([H|T], F) :- rotate(T,F1), append(F1,T,F).
Run Code Online (Sandbox Code Playgroud)
在我的脑海中,它完美地工作,虽然我只是false作为一个输出.任何帮助解决这个问题将非常感谢!
我无法理解差异列表,特别是在这个谓词中:
palindrome(A, A).
palindrome([_|A], A).
palindrome([C|A], D) :-
palindrome(A, B),
B=[C|D].
Run Code Online (Sandbox Code Playgroud)
谁能帮我跟踪发生的事情?
我们常常感兴趣的是计算f(i)i =mnΣ,i = m到n的函数值f(i)之和.定义'sigma fm n',它计算f(i)i =mnΣ.这与定义'sigma(f,m,n)'不同
我需要写一个这个函数的Curried版本.我在理解这实际上是如何工作时遇到了一些麻烦.我知道Curry函数是一个函数,它产生一个函数.这会是咖喱功能的一个例子吗?
fun myCurry f x = f(x)
Run Code Online (Sandbox Code Playgroud)
至于设置我的问题,这是一个可以接受的开始吗?
fun sigma f m n =
Run Code Online (Sandbox Code Playgroud)
我还没有进一步,因为我无法真正理解我被要求做的事情.
我有这个功能:
map(map(fn x =>[x])) [[],[1],[2,3,4]];
Run Code Online (Sandbox Code Playgroud)
哪个产生:
val it = [[],[[1]],[[2],[3],[4]]]
Run Code Online (Sandbox Code Playgroud)
我不明白这个功能是如何工作的.每个地图功能都不需要功能和列表吗?似乎没有足够的参数来实际执行.
如果我跑:
map(fn x =>[x]) [[],[1],[2,3,4]];
Run Code Online (Sandbox Code Playgroud)
我明白了:
val it = [[[]], [[1]], [[2,3,4]]];
Run Code Online (Sandbox Code Playgroud)
这对我来说更有意义,因为它需要列表中的每个元素,并将其包装在另一个列表中.但是当我在其上放置另一张地图时,它会改变输出.任何人都可以向我解释这个吗?谢谢!