将 Prolog 程序转换为 Haskell 程序
Converting a Prolog program to a Haskell program
我有一个考试的复习题,我需要一些指导。
Using the following Prolog program as an executable specification,
mix(Xs,Ys):-remix(Xs,[],Ys).
remix([],Ys,Ys).
remix([X|Xs],Ys,Zs):-remix(Xs,[X|Ys],Zs).
write an equivalent Haskell program.
这是我目前的 Haskell 代码:
mix Xs Ys = remix Xs [] Ys
remix [] Ys Zs = Zs
remix (X:Xs) Ys Zs = x : (remix Xs Ys Zs)
这个Haskell程序是否等同于上面的Prolog代码?如果不是,我做错了什么?
直译为:
mix xs = remix xs []
remix [] ys = ys
remix (x:xs) ys = remix xs (x:ys)
假设 mix/2
的第一个参数严格来说是输入参数,mix/2
和 remix/3
的最后一个参数都是输出参数。然后,Haskell 函数 将您正在翻译的 Prolog predicates 的最后一个参数作为 return 值。否则,Haskell 版本与 Prolog 完全相同,只是正确的 Haskell 语法。将它与您的尝试进行比较,您会发现很多细微差别(我想 Haskell 编译器也会告诉您这些?)
(Haskell如有错误请指正)
但是这有一些问题。可以通过两种方式查询原始 Prolog 程序:
?- mix([1,2,3], M).
M = [3, 2, 1].
?- mix(M, [3,2,1]).
M = [1, 2, 3] .
甚至:
?- mix(X, Y), numbervars(X-Y, 0, _).
X = Y, Y = [] ;
X = Y, Y = [A] ;
X = [A, B],
Y = [B, A] ;
X = [A, B, C],
Y = [C, B, A] ;
X = [A, B, C, D],
Y = [D, C, B, A] . % and so on
然而,第二个查询留下了一个选择点,如果你尝试查看你可能得到的其他解决方案(输入Space或;
而不是 Enter),程序不会终止。它是否说明 如何 使用原始 Prolog 程序?
我有一个考试的复习题,我需要一些指导。
Using the following Prolog program as an executable specification,
mix(Xs,Ys):-remix(Xs,[],Ys). remix([],Ys,Ys). remix([X|Xs],Ys,Zs):-remix(Xs,[X|Ys],Zs).
write an equivalent Haskell program.
这是我目前的 Haskell 代码:
mix Xs Ys = remix Xs [] Ys
remix [] Ys Zs = Zs
remix (X:Xs) Ys Zs = x : (remix Xs Ys Zs)
这个Haskell程序是否等同于上面的Prolog代码?如果不是,我做错了什么?
直译为:
mix xs = remix xs []
remix [] ys = ys
remix (x:xs) ys = remix xs (x:ys)
假设 mix/2
的第一个参数严格来说是输入参数,mix/2
和 remix/3
的最后一个参数都是输出参数。然后,Haskell 函数 将您正在翻译的 Prolog predicates 的最后一个参数作为 return 值。否则,Haskell 版本与 Prolog 完全相同,只是正确的 Haskell 语法。将它与您的尝试进行比较,您会发现很多细微差别(我想 Haskell 编译器也会告诉您这些?)
(Haskell如有错误请指正)
但是这有一些问题。可以通过两种方式查询原始 Prolog 程序:
?- mix([1,2,3], M).
M = [3, 2, 1].
?- mix(M, [3,2,1]).
M = [1, 2, 3] .
甚至:
?- mix(X, Y), numbervars(X-Y, 0, _).
X = Y, Y = [] ;
X = Y, Y = [A] ;
X = [A, B],
Y = [B, A] ;
X = [A, B, C],
Y = [C, B, A] ;
X = [A, B, C, D],
Y = [D, C, B, A] . % and so on
然而,第二个查询留下了一个选择点,如果你尝试查看你可能得到的其他解决方案(输入Space或;
而不是 Enter),程序不会终止。它是否说明 如何 使用原始 Prolog 程序?