In App Inventor, YailList is a specialization of Kawa Scheme's Pair class. Thus, all lists in App Inventor are singly linked lists. The add(Object) method you call is defined by AbstractSequence, and assumes that there is a method called addPos(int, Object) implemented. This is true of Kawa Scheme's Vector classes, but not of Pair. The primary reason for this is that you can't make assumptions about what a Pair represents (it could be used to construct a tree as opposed to a list, or could be the terminator of a dotted list). Because of the computational properties of singly linked lists, expect that add(Object) will need O(n) time to perform an insertion. There are a few ways you could go about addressing the problem:
1. Implement a helper function (won't require changes to core App Inventor), that calls lastPair() to get the last pair and then calls setCdr() with a new list constructed with LList.makeList(Object[]). You could use a similar strategy both for add and addAll (the latter of which is important because the naive implementation will result in O(n^2) complexity).
2. Implement addPos(int, Object) on YailList, since we have stronger semantics there about how the object is being manipulated.
3. Implement add(Object) and addAll(Collection) functions on YailList, overriding the superclass implementations.
4. More hacky version of 2/3 but doesn't require changing YailList: Create a SmartYailList class that extends YailList and, given a YailList, "wraps" it. Have it implement add(Object) and addAll(Collection), and use it to wrap/manipulate YailLists. Since every SmartYailList is a YailList, you should be able to use it wherever a YailList is required.
Cheers,
Evan