Jag har faktiskt redan beskrivit varför det inte funkar, men det här med filter är som sagt svårt så jag ska försöka förtydliga lite.
Ett filter (whose/where-sats) är ett sätt att ställa upp villkor för objekt. För att det ska funka måste åtminstone två förutsättningar vara uppfyllda
1) Objektet måste stödja filter
2) Filtret måste gälla en egenskap som finns direkt hos objektet
I ditt fall är det första uppfyllt, men inte det andra. Om du säger "get properties of paragraph 1" så får du en uppsättning egenskaper som finns hos objektet, bland annat ordet "contents" dvs. vilket textinnehåll som stycket har
Däremot finns INTE egenskapen "first word"!
Anledningen till att du kan säga "first word of contents of paragraph 1" är att AppleScript FÖRST hämtar texten och DÄREFTER bryter ut det första ordet. Det är alltså en tvåstegsraket - men filter måste vara en enstegsraket.
Då kanske man frågar sig varför man kan säga 'paragraphs whose contents begin with "Alfa" ' och vid närmare påsyn ser man att anledningen till det är att vi då utvärderar "contents" direkt - dvs en enstegsraket.
Rent teoretiskt skulle man alltså i det här läget behöva tänka sig ett filter som sa något i stil med
get paragraphs whose contents begins with something that is in {"Alfa", "Beta", "Gamma"}
Problemet är att det inte går, eftersom "begins" kräver att det man jämför med är en text t.ex. "Alfa" och inte en lista (även om listan innehåller texter)
I det här läget måste man nog gilla läget och inse att man måste köra med en repeat-loop, och det finns då två sätt att göra det, det ena är att man loopar listan, och frågar efter stycken som börjar med respektive ord, det andra är att man går genom styckena och frågar om det börjar med något av orden i listan.
Vad som är effektivast beror på hur lång listan med ord, respektive hur många stycken som finns, men i det här fallet skulle jag nog föredra att loopa styckena, och då blir det såhär
set mySaveList to {"Alfa", "Beta", "Gamma", "Delta"}
set myContentsOfDeletedParagraphs to {}
tell application "Adobe InDesign CS2"
tell active document
tell story 1
repeat with i from (count of paragraphs) to 1 by -1
set myCurrentParaContents to (contents of paragraph i)
if first word of myCurrentParaContents is not in mySaveList then
set end of myContentsOfDeletedParagraphs to myCurrentParaContents
delete paragraph i
end if
end repeat
end tell
end tell
end tell
Observera att jag tar bort från slutet, vilket är säkrare (och i det här fallet nödvändigt) eftersom man annars förskjuter textinnehållet så att säga