Hello, I am trying an exercise that finds anagrams of a word from a list of candidate words.
I am having issues with scalar extension of the left arg, which I thought should automatically repeat the scalar left arg to match each item in the right vector arg. It seems to work only if I do the expansion manually (that is, repeat the left arg explicitly rather than let APL do it).
(If formatting below is not readable, please convert it to a fixed-with font)
w
┌→─────┐
│listen│
└──────┘
cl
┌→────────────────────────────────────────────┐
│┌→──────┐ ┌→─────┐ ┌→─────┐ ┌→─────┐ ┌→─────┐│
││enlists│ │google│ │inlets│ │banana│ │tinsel││
│└───────┘ └──────┘ └──────┘ └──────┘ └──────┘│
└∊────────────────────────────────────────────┘
⎕cr 'is_anagram_of'
┌→──────────────────────────────┐
↓r ← word is_anagram_of other │
│r ← word[⍋word] ≡ other[⍋other]│
└───────────────────────────────┘
w is_anagram_of cl
0
w is_anagram_of ¨ cl ⍝ <-- Should this not implicitly expand left arg?
DOMAIN ERROR
is_anagram_of[1] r←word[⍋word]≡other[⍋other]
^ ^
w w w w w is_anagram_of cl ⍝ <-- this works, w w w w w matches ⍴cl
0
w w w w w is_anagram_of ¨ cl
┌→────────┐
│0 0 1 0 1│
└─────────┘
(w w w w w is_anagram_of ¨ cl)/cl
┌→────────────────┐
│┌→─────┐ ┌→─────┐│
││inlets│ │tinsel││
│└──────┘ └──────┘│
└∊────────────────┘
(∊1 (⍴cl))⍴⊂w
┌→───────────────────────────────────────────┐
↓┌→─────┐ ┌→─────┐ ┌→─────┐ ┌→─────┐ ┌→─────┐│
││listen│ │listen│ │listen│ │listen│ │listen││
│└──────┘ └──────┘ └──────┘ └──────┘ └──────┘│
└∊───────────────────────────────────────────┘
w w w w w
┌→───────────────────────────────────────────┐
│┌→─────┐ ┌→─────┐ ┌→─────┐ ┌→─────┐ ┌→─────┐│
││listen│ │listen│ │listen│ │listen│ │listen││
│└──────┘ └──────┘ └──────┘ └──────┘ └──────┘│
└∊───────────────────────────────────────────┘
((∊1 (⍴cl))⍴⊂w) is_anagram_of ¨ cl ⍝ <-- ?? Why does this not work as (w w w w w)?
RANK ERROR
((∈1(⍴cl))⍴⊂w)is_anagram_of¨cl
^ ^
Advice appreciated,
Thank you,
-Russ