~ 안에 임의의 목록 수에서 값의 모든 조합을 반복합니다. 다른 목록 목록에 목록을 삽입해야 한다는 답변을 게시했습니다. InsertInto 함수는 내가 원하는 것이 아닌 요소로 삽입된 목록의 압축을 풉니다. 목록의 끝을 넘어 하나의 요소에 대입문을 사용하여 목록을 요소로 삽입했습니다. 또 다른 선택은 목록을 삽입하기 전에 다른 목록에 래핑하는 것입니다(그래서 래핑된 목록의 압축을 풀고 원본을 삽입합니다).
목록에 목록을 삽입하는 더 좋은 방법이 있습니까? 결과와 p는 모두 목록입니다.
결과 [ N개 항목 ( 결과 ) + 1 ] = 피 약간 장황하지만 작동하며 p가 목록의 마지막 요소 바로 뒤에 저장된다는 것이 상당히 분명해 보입니다. 확장에는 좋지만 다른 곳에 삽입할 수 없습니다.
결과={"a"};
p={"b","c"};
result[N 항목( 결과 ) + 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"}}; // 좋은: 내가 원하는 것
예. 저는 evallist() 접근 방식을 사용해 왔으며 항상 설명할 주석이 필요하다고 생각합니다. 내 원래 코드(상단 링크)에서는 삽입 사이에 p를 계속 변경하므로 p에 대한 참조를 삽입할 수 없습니다.
나는 그것을 다음에 사용할지도 모른다. 더 복잡한 (커버 아래) 데이터 구조를 사용하고 있고 이미 nitems(...)+1 ...을 사용하여 인덱스를 생성하고 있기 때문에 더 간단해 보입니다. 예, 더 나은 선택일 수 있습니다.
직접적인 해결책은 아니지만 해결 방법으로 나는 무엇과 유사한 연관 배열을 사용하는 경향이 있습니다. @pmroz 귀하의 링크에서 제안했습니다.
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
