我想下面的代碼,其中的foreach和string_codes分別工作:的foreach不是在序言
7 ?- string_codes("acid", D).
D = [97, 99, 105, 100].
8 ?- string_codes(S, [116, 101, 115, 116]).
S = "test".
15 ?- foreach(member(S, ["test", "acid"]), writeln(S)).
test
acid
true.
卻不能在一起:
14 ?- foreach(member(S, ["test", "acid"]), string_codes(S, X)).
false.
17 ?- foreach(member(X,[[116, 101, 115, 116], [97, 99, 105, 100]]), string_codes(S, X)).
false.
只有第一個字母印有驗證碼:
77 ?- foreach(member(X, [[97], [98],[99]]), (string_codes(S,X), writeln(S))).
a
在哪裏的問題,怎麼能解決呢?
編輯:MAPLIST工作只有一個辦法:
74 ?- maplist(string_codes, ["test","acid"], L).
L = [[116, 101, 115, 116], [97, 99, 105, 100]].
73 ?- maplist(string_codes, L, [97, 98,99]).
ERROR: string_codes/2: Type error: `list' expected, found `97' (an integer)
其實,每個號碼應該是一個列表:
75 ?- maplist(string_codes, L, [[97], [98],[99]]).
L = ["a", "b", "c"].
我如何轉換號碼列表到列表的列表?
我想:
tolistlist([H|T],[[H]|Outl]):-
writeln([[H]]),
tolistlist(T,Outl).
tolistlist([],[]).
它不會產生這種模式的數字列表,但仍然不能正常工作:
[[115],[116]]
ERROR: string_codes/2: Type error: `character_code' expected, found `[116]' (a list)
105 ?-
改爲使用'maplist/3'。 – mat
'string_codes/2'在數字列表(字符代碼)上運行。所以,'maplist(string_codes,L,X)'預計'X'是字符代碼列表的列表。你能給出一個你想要轉換爲列表清單的例子嗎?如果你只想將'[97,98,99]'轉換爲'[[97],[98],[99]]',那麼很容易用'mapllist'完成:'code_as_list(C,[C ]),maplist(code_as_list,Lin,Lout)''。 – lurker
它正在生產[[116,101,115,116]]而不是[[116],[101],[115],[116]]。我的原始列表是[[1,2,3],[4,5,6] ...]。我正在嘗試上面的功能。 – rnso