에 ARBITRARY 목록 수의 모든 값 조합을 반복합니다. 다른 목록 목록에 목록을 삽입해야하는 답변을 게시했습니다. InsertInto 함수는 삽입 된 목록을 내가 원하는 것이 아닌 요소로 압축을 풉니 다. 목록을 요소로 삽입하는 목록의 끝을 넘어서는 요소 1에 할당 문을 사용했습니다. 또 다른 선택은 목록을 삽입하기 전에 다른 목록으로 래핑하는 것입니다 (그러므로 래핑 된 목록의 압축을 풀고 원본을 삽입합니다).
목록에 목록을 삽입하는 더 좋은 방법이 있습니까? 결과와 p는 모두 목록입니다.
결과 [ N 항목 ( 결과 ) + 1 ] = 피 약간 장황하지만 작동하며 p가 목록의 마지막 요소 바로 뒤에 저장된다는 것이 상당히 분명해 보입니다. 확장에는 좋지만 다른 곳에 삽입 할 수 없습니다.
결과 = { "a"};
p = { "b", "c"};
result [N Items (결과) + 1] = p; // 장황하지만 의도는 분명합니다.
표시 (결과);
/ * :
결과 = { "a", { "b", "c"}}; // 좋은
Insertinto (결과, p) p가 아닌 p의 요소를 삽입하기 때문에 작동하지 않습니다.
결과 = { "a"};
p = { "b", "c"};
insertinto (결과, p); // 맞아 보이지만 ...
표시 (결과);
/ * :
결과 = { "a", "b", "c"}; // 내가 원하는 것이 아님
insertinto (결과, evallist ({p})) 작동하지만 과제보다 읽기 어려운 것 같습니다. 어디에나 삽입 할 수 있지만 추가 사본을 만듭니다.
결과 = { "a"};
p = { "b", "c"};
insertinto (result, evallist ({p})); // 목록의 추가 사본을 만들고 읽기 어렵습니다.
표시 (결과);
/ * :
결과 = { "a", { "b", "c"}}; // 좋아 : 내가 원하는 것
FWIW 나는 항상 두 번째 예제에서 EvalList () 방식으로 수행합니다. 나는 당신이 그렇게 할 수 있다고 생각하고, 당신이 원하거나 필요로 할 때까지 평가하지 않을 것입니다 ... 이것이 당신을 많이 사는지 확실하지 않습니다 (?)
result = {"a"};
p = {"b", "c"};
Insert Into( result, {p} ); //don't evaluate p here... but of course p is non-static
show(result[2][1]); //can still access elements of p if desired
Show( Eval List( result ) ); //or can eval to see the whole thing

직접적인 솔루션은 아니지만 해결 방법으로 더 많이 사용하는 경향이 있습니다. @pmroz 귀하의 링크에 제안되었습니다.
다음에 사용할 수도 있습니다. 더 복잡한 데이터 구조를 사용하더라도 더 간단 해 보이며 이미 nitems (...) + 1 ... 예, 더 나은 선택 일 수 있습니다.
예. 나는 evallist() 접근 방식을 사용했고 항상 설명할 주석이 필요하다고 느낍니다. 내 원래 코드(상단의 링크)에서 삽입 사이에 p를 계속 변경하므로 p에 대한 참조를 삽입할 수 없습니다.