小编use*_*815的帖子

在列表中查找最大值 - Prolog

我刚刚被介绍给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个参数才能完成此操作吗?

prolog

5
推荐指数
3
解决办法
4万
查看次数

向右旋转列表(Prolog)

我有一项任务,我需要将列表向右旋转一次.我也有一个约束,我只能使用一个谓词.似乎向左移动非常容易:

([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作为一个输出.任何帮助解决这个问题将非常感谢!

list prolog

5
推荐指数
1
解决办法
2764
查看次数

了解差异列表(Prolog)

我无法理解差异列表,特别是在这个谓词中:

palindrome(A, A).
palindrome([_|A], A).
palindrome([C|A], D) :-
   palindrome(A, B),
   B=[C|D].
Run Code Online (Sandbox Code Playgroud)

谁能帮我跟踪发生的事情?

prolog palindrome difference-lists

5
推荐指数
1
解决办法
2755
查看次数

咖喱功能问题(SML/NJ)

我们常常感兴趣的是计算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)

我还没有进一步,因为我无法真正理解我被要求做的事情.

functional-programming sml smlnj currying

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

SML地图功能

我有这个功能:

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)

这对我来说更有意义,因为它需要列表中的每个元素,并将其包装在另一个列表中.但是当我在其上放置另一张地图时,它会改变输出.任何人都可以向我解释这个吗?谢谢!

sml smlnj currying partial-application map-function

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