Я пытаюсь следующий код, где Еогеасп и 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
Где проблема и как ее решить?
Edit: 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