﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Millisecond Forums » Millisecond Forums » Inquisit 5  » How do I modify the Letter Memory Task in such a way that it operates with words rather than letters ?</title><generator>InstantForum 2017-1 Final</generator><description>Millisecond Forums</description><link>https://forums.millisecond.com/</link><webMaster>Millisecond Forums</webMaster><lastBuildDate>Sat, 26 Sep 2026 01:40:52 GMT</lastBuildDate><ttl>20</ttl><item><title>How do I modify the Letter Memory Task in such a way that it operates with words rather than letters ?</title><link>https://forums.millisecond.com/Topic25951.aspx</link><description>We have been tinkering with the Letter Memory Task to use it for word recognition rather than letter recognition. While we have been successful in making the task recognize a full word as an answer, we still can't enter more than one word as an answer (we want the participants to answer with the last 3 words they remember seeing, just like LMT demands an answer with last 3 letters). &amp;nbsp;The task also only seem to recognize the last 3 letters of the last shown word as the right answer. However, we'd like the task to recognize the last 3 words (independently&amp;nbsp;of the order in which the participants&amp;nbsp;give them) as the correct answer and give feedback that is concordant with that.&lt;br/&gt;&lt;br/&gt;A file is attached that shows our work so far.</description><pubDate>Mon, 29 Oct 2018 17:36:27 GMT</pubDate><dc:creator>labdandeneau@gmail.com</dc:creator></item><item><title>RE: How do I modify the Letter Memory Task in such a way that it operates with words rather than letters ?</title><link>https://forums.millisecond.com/Topic25959.aspx</link><description>&lt;div data-id="25955" class="if-quote-wrapper" unselectable="on" data-guid="1540859585403"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="25955" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="25955" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="25955" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Monday, October 29, 2018&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-25955"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="25953" class="if-quote-wrapper" unselectable="on" data-guid="1540859585403"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="25953" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="25953" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="25953" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Monday, October 29, 2018&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-25953"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="25951" class="if-quote-wrapper" unselectable="on" data-guid="1540859585403"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="25951" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="25951" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="25951" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;&lt;a href="mailto:labdandeneau@gmail.com"&gt;labdandeneau@gmail.com&lt;/a&gt; - Saturday, October 27, 2018&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-25951"&gt;&lt;div class="if-quote-message-margin"&gt;We have been tinkering with the Letter Memory Task to use it for word recognition rather than letter recognition. While we have been successful in making the task recognize a full word as an answer, we still can't enter more than one word as an answer (we want the participants to answer with the last 3 words they remember seeing, just like LMT demands an answer with last 3 letters). &amp;nbsp;The task also only seem to recognize the last 3 letters of the last shown word as the right answer. However, we'd like the task to recognize the last 3 words (independently&amp;nbsp;of the order in which the participants&amp;nbsp;give them) as the correct answer and give feedback that is concordant with that.&lt;br/&gt;&lt;br/&gt;A file is attached that shows our work so far.&lt;a class="if-quote-goto quote-link" href="#" data-id="25951"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;lt;trial recall_word&amp;gt;&lt;br/&gt;/ ontrialbegin = [&lt;br/&gt;values.last3 = substring(values.presentedWords, length(values.presentedWords) - 3, 3);&lt;br/&gt;values.recallCount += 1;&lt;br/&gt;if (values.recallCount == 1){&lt;br/&gt;values.RecallStart = script.elapsedtime;&lt;br/&gt;};&lt;br/&gt;]&lt;br/&gt;/ stimulusframes = [1=WhiteScreen, sentimental, talkative, religious, thrifty, curious, excited, systematic, serious, definite, deliberate, meticulous, mediative, quick, precise, subtle, idealistic, _, clear, exit, recalledwords, recallprompt]&lt;br/&gt;/ validresponse = (sentimental, talkative, religious, thrifty, curious, excited, , systematic, serious, definite, deliberate, meticulous, mediative, quick, precise, subtle, idealistic, _, clear, exit)&lt;br/&gt;/ monkeyresponse = ("sentimental", "talkative", "religious", "thrifty", "curious", "excited", "systematic", "serious", "definite", "deliberate", "meticulous", "mediative", "quick", "precise", "subtle", "idealistic", "exit")&lt;br/&gt;/ ontrialend = [&lt;br/&gt;if(trial.recall_word.response!="exit" &amp;amp;&amp;amp; trial.recall_word.response!="clear") { &lt;br/&gt;&lt;strong&gt;values.recalledwords=concat(values.recalledwords, trial.recall_word.response);&lt;/strong&gt;&lt;br/&gt;values.recalledwords = substring(values.recalledwords, 0, 3);&lt;br/&gt;};&lt;br/&gt;if(trial.recall_word.response=="clear") {&lt;br/&gt;values.recalledwords="";&lt;br/&gt;};&lt;br/&gt;if (trial.recall_word.response == "exit"){&lt;br/&gt;values.RecallEnd = script.elapsedtime;&lt;br/&gt;};&lt;br/&gt;]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;You're concatenating the responses to a value per&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;values.recalledwords=concat(values.recalledwords, trial.recall_word.response);&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;and then you're mereley extracting a substring of the 1st three letters of the entire substring per&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;values.recalledwords = substring(values.recalledwords, 0, 3);&lt;br/&gt;&lt;br/&gt;&lt;/strong&gt;Why?&lt;br/&gt;&lt;br/&gt;In the same vein, this doesn't make sense either:&lt;br/&gt;&lt;br/&gt;&amp;lt;trial recall_end&amp;gt;&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [&lt;br/&gt;values.recallDuration = values.RecallEnd - values.RecallStart;&lt;br/&gt;values.temp_last3 = values.last3;&lt;br/&gt;&lt;br/&gt;values.recalledwords = concat(values.recalledwords, "&amp;nbsp;");&lt;br/&gt;if (contains(values.temp_last3, substring(values.recalledwords, 0, 1))){&lt;br/&gt;values.countCorrectWords += 1;&lt;br/&gt;values.temp_last3 = replaceall(values.temp_last3, substring(values.recalledwords, 0, 1), "");&lt;br/&gt;};&lt;br/&gt;if (contains(values.temp_last3, substring(values.recalledwords, 1, 1))){&lt;br/&gt;values.countCorrectWords += 1;&lt;br/&gt;values.temp_last3 = replaceall(values.temp_last3, substring(values.recalledwords, 1, 1), "");&lt;br/&gt;};&lt;br/&gt;if (contains(values.temp_last3, substring(values.recalledwords, 2, 1))){&lt;br/&gt;values.countCorrectWords += 1;&lt;br/&gt;values.temp_last3 = replaceall(values.temp_last3, substring(values.recalledwords, 2, 1), "");&lt;br/&gt;};&lt;br/&gt;&lt;br/&gt;list.correctwords.insertitem(values.countCorrectWords, 1);&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;if (values.countCorrectWords != 3){&lt;br/&gt;trial.recall_end.insertstimulusframe(text.errorFeedback, 1);&lt;br/&gt;values.correct = 0;&lt;br/&gt;} else {&lt;br/&gt;trial.recall_end.insertstimulusframe(text.correctFeedback, 1);&lt;br/&gt;values.correct = 1;&lt;br/&gt;};&lt;br/&gt;list.accuracy.insertitem(values.correct, 1);&lt;br/&gt;]&lt;br/&gt;/ stimulusframes = [1 = clearscreen, continue]&lt;br/&gt;/ validresponse = (continue)&lt;br/&gt;/ recorddata = true&lt;br/&gt;/ posttrialpause = parameters.ITI&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;Nowhere are you actually keeping the entire words, you're just extracting single letters and keeping those around. What you'll probably want to do is keep the words intact and use the contains() string function to check whether the response string holds the proper words.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="25953"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;FWIW, using list elements to store both the presented words as well as the reponses is probably easier than using only values.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="25955"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;Here's a quick modification (only partly tested &amp;amp; not made to look pretty) using lists, this should give you the general idea.&lt;br/&gt;</description><pubDate>Mon, 29 Oct 2018 17:36:27 GMT</pubDate><dc:creator>Dave</dc:creator></item><item><title>RE: How do I modify the Letter Memory Task in such a way that it operates with words rather than letters ?</title><link>https://forums.millisecond.com/Topic25955.aspx</link><description>&lt;div data-id="25953" class="if-quote-wrapper" unselectable="on" data-guid="1540825357048"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="25953" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="25953" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="25953" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - Monday, October 29, 2018&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-25953"&gt;&lt;div class="if-quote-message-margin"&gt;&lt;div data-id="25951" class="if-quote-wrapper" unselectable="on" data-guid="1540825357048"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="25951" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="25951" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="25951" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;&lt;a href="mailto:labdandeneau@gmail.com"&gt;labdandeneau@gmail.com&lt;/a&gt; - Saturday, October 27, 2018&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-25951"&gt;&lt;div class="if-quote-message-margin"&gt;We have been tinkering with the Letter Memory Task to use it for word recognition rather than letter recognition. While we have been successful in making the task recognize a full word as an answer, we still can't enter more than one word as an answer (we want the participants to answer with the last 3 words they remember seeing, just like LMT demands an answer with last 3 letters). &amp;nbsp;The task also only seem to recognize the last 3 letters of the last shown word as the right answer. However, we'd like the task to recognize the last 3 words (independently&amp;nbsp;of the order in which the participants&amp;nbsp;give them) as the correct answer and give feedback that is concordant with that.&lt;br/&gt;&lt;br/&gt;A file is attached that shows our work so far.&lt;a class="if-quote-goto quote-link" href="#" data-id="25951"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;lt;trial recall_word&amp;gt;&lt;br/&gt;/ ontrialbegin = [&lt;br/&gt;values.last3 = substring(values.presentedWords, length(values.presentedWords) - 3, 3);&lt;br/&gt;values.recallCount += 1;&lt;br/&gt;if (values.recallCount == 1){&lt;br/&gt;values.RecallStart = script.elapsedtime;&lt;br/&gt;};&lt;br/&gt;]&lt;br/&gt;/ stimulusframes = [1=WhiteScreen, sentimental, talkative, religious, thrifty, curious, excited, systematic, serious, definite, deliberate, meticulous, mediative, quick, precise, subtle, idealistic, _, clear, exit, recalledwords, recallprompt]&lt;br/&gt;/ validresponse = (sentimental, talkative, religious, thrifty, curious, excited, , systematic, serious, definite, deliberate, meticulous, mediative, quick, precise, subtle, idealistic, _, clear, exit)&lt;br/&gt;/ monkeyresponse = ("sentimental", "talkative", "religious", "thrifty", "curious", "excited", "systematic", "serious", "definite", "deliberate", "meticulous", "mediative", "quick", "precise", "subtle", "idealistic", "exit")&lt;br/&gt;/ ontrialend = [&lt;br/&gt;if(trial.recall_word.response!="exit" &amp;amp;&amp;amp; trial.recall_word.response!="clear") { &lt;br/&gt;&lt;strong&gt;values.recalledwords=concat(values.recalledwords, trial.recall_word.response);&lt;/strong&gt;&lt;br/&gt;values.recalledwords = substring(values.recalledwords, 0, 3);&lt;br/&gt;};&lt;br/&gt;if(trial.recall_word.response=="clear") {&lt;br/&gt;values.recalledwords="";&lt;br/&gt;};&lt;br/&gt;if (trial.recall_word.response == "exit"){&lt;br/&gt;values.RecallEnd = script.elapsedtime;&lt;br/&gt;};&lt;br/&gt;]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;You're concatenating the responses to a value per&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;values.recalledwords=concat(values.recalledwords, trial.recall_word.response);&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;and then you're mereley extracting a substring of the 1st three letters of the entire substring per&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;values.recalledwords = substring(values.recalledwords, 0, 3);&lt;br/&gt;&lt;br/&gt;&lt;/strong&gt;Why?&lt;br/&gt;&lt;br/&gt;In the same vein, this doesn't make sense either:&lt;br/&gt;&lt;br/&gt;&amp;lt;trial recall_end&amp;gt;&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [&lt;br/&gt;values.recallDuration = values.RecallEnd - values.RecallStart;&lt;br/&gt;values.temp_last3 = values.last3;&lt;br/&gt;&lt;br/&gt;values.recalledwords = concat(values.recalledwords, "&amp;nbsp;");&lt;br/&gt;if (contains(values.temp_last3, substring(values.recalledwords, 0, 1))){&lt;br/&gt;values.countCorrectWords += 1;&lt;br/&gt;values.temp_last3 = replaceall(values.temp_last3, substring(values.recalledwords, 0, 1), "");&lt;br/&gt;};&lt;br/&gt;if (contains(values.temp_last3, substring(values.recalledwords, 1, 1))){&lt;br/&gt;values.countCorrectWords += 1;&lt;br/&gt;values.temp_last3 = replaceall(values.temp_last3, substring(values.recalledwords, 1, 1), "");&lt;br/&gt;};&lt;br/&gt;if (contains(values.temp_last3, substring(values.recalledwords, 2, 1))){&lt;br/&gt;values.countCorrectWords += 1;&lt;br/&gt;values.temp_last3 = replaceall(values.temp_last3, substring(values.recalledwords, 2, 1), "");&lt;br/&gt;};&lt;br/&gt;&lt;br/&gt;list.correctwords.insertitem(values.countCorrectWords, 1);&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;if (values.countCorrectWords != 3){&lt;br/&gt;trial.recall_end.insertstimulusframe(text.errorFeedback, 1);&lt;br/&gt;values.correct = 0;&lt;br/&gt;} else {&lt;br/&gt;trial.recall_end.insertstimulusframe(text.correctFeedback, 1);&lt;br/&gt;values.correct = 1;&lt;br/&gt;};&lt;br/&gt;list.accuracy.insertitem(values.correct, 1);&lt;br/&gt;]&lt;br/&gt;/ stimulusframes = [1 = clearscreen, continue]&lt;br/&gt;/ validresponse = (continue)&lt;br/&gt;/ recorddata = true&lt;br/&gt;/ posttrialpause = parameters.ITI&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;Nowhere are you actually keeping the entire words, you're just extracting single letters and keeping those around. What you'll probably want to do is keep the words intact and use the contains() string function to check whether the response string holds the proper words.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="25953"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;FWIW, using list elements to store both the presented words as well as the reponses is probably easier than using only values.&lt;br/&gt;</description><pubDate>Mon, 29 Oct 2018 08:03:48 GMT</pubDate><dc:creator>Dave</dc:creator></item><item><title>RE: How do I modify the Letter Memory Task in such a way that it operates with words rather than letters ?</title><link>https://forums.millisecond.com/Topic25953.aspx</link><description>&lt;div data-id="25951" class="if-quote-wrapper" unselectable="on" data-guid="1540823888380"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="25951" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="25951" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="25951" title=" "&gt;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;&lt;a href="mailto:labdandeneau@gmail.com"&gt;labdandeneau@gmail.com&lt;/a&gt; - Saturday, October 27, 2018&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-25951"&gt;&lt;div class="if-quote-message-margin"&gt;We have been tinkering with the Letter Memory Task to use it for word recognition rather than letter recognition. While we have been successful in making the task recognize a full word as an answer, we still can't enter more than one word as an answer (we want the participants to answer with the last 3 words they remember seeing, just like LMT demands an answer with last 3 letters). &amp;nbsp;The task also only seem to recognize the last 3 letters of the last shown word as the right answer. However, we'd like the task to recognize the last 3 words (independently&amp;nbsp;of the order in which the participants&amp;nbsp;give them) as the correct answer and give feedback that is concordant with that.&lt;br/&gt;&lt;br/&gt;A file is attached that shows our work so far.&lt;a class="if-quote-goto quote-link" href="#" data-id="25951"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&amp;lt;trial recall_word&amp;gt;&lt;br/&gt;/ ontrialbegin = [&lt;br/&gt;values.last3 = substring(values.presentedWords, length(values.presentedWords) - 3, 3);&lt;br/&gt;values.recallCount += 1;&lt;br/&gt;if (values.recallCount == 1){&lt;br/&gt;values.RecallStart = script.elapsedtime;&lt;br/&gt;};&lt;br/&gt;]&lt;br/&gt;/ stimulusframes = [1=WhiteScreen, sentimental, talkative, religious, thrifty, curious, excited, systematic, serious, definite, deliberate, meticulous, mediative, quick, precise, subtle, idealistic, _, clear, exit, recalledwords, recallprompt]&lt;br/&gt;/ validresponse = (sentimental, talkative, religious, thrifty, curious, excited, , systematic, serious, definite, deliberate, meticulous, mediative, quick, precise, subtle, idealistic, _, clear, exit)&lt;br/&gt;/ monkeyresponse = ("sentimental", "talkative", "religious", "thrifty", "curious", "excited", "systematic", "serious", "definite", "deliberate", "meticulous", "mediative", "quick", "precise", "subtle", "idealistic", "exit")&lt;br/&gt;/ ontrialend = [&lt;br/&gt;if(trial.recall_word.response!="exit" &amp;amp;&amp;amp; trial.recall_word.response!="clear") { &lt;br/&gt;&lt;strong&gt;values.recalledwords=concat(values.recalledwords, trial.recall_word.response);&lt;/strong&gt;&lt;br/&gt;values.recalledwords = substring(values.recalledwords, 0, 3);&lt;br/&gt;};&lt;br/&gt;if(trial.recall_word.response=="clear") {&lt;br/&gt;values.recalledwords="";&lt;br/&gt;};&lt;br/&gt;if (trial.recall_word.response == "exit"){&lt;br/&gt;values.RecallEnd = script.elapsedtime;&lt;br/&gt;};&lt;br/&gt;]&lt;br/&gt;...&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;You're concatenating the responses to a value per&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;values.recalledwords=concat(values.recalledwords, trial.recall_word.response);&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;and then you're mereley extracting a substring of the 1st three letters of the entire substring per&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;values.recalledwords = substring(values.recalledwords, 0, 3);&lt;br/&gt;&lt;br/&gt;&lt;/strong&gt;Why?&lt;br/&gt;&lt;br/&gt;In the same vein, this doesn't make sense either:&lt;br/&gt;&lt;br/&gt;&amp;lt;trial recall_end&amp;gt;&lt;br/&gt;&lt;strong&gt;/ ontrialbegin = [&lt;br/&gt;values.recallDuration = values.RecallEnd - values.RecallStart;&lt;br/&gt;values.temp_last3 = values.last3;&lt;br/&gt;&lt;br/&gt;values.recalledwords = concat(values.recalledwords, "&amp;nbsp;");&lt;br/&gt;if (contains(values.temp_last3, substring(values.recalledwords, 0, 1))){&lt;br/&gt;values.countCorrectWords += 1;&lt;br/&gt;values.temp_last3 = replaceall(values.temp_last3, substring(values.recalledwords, 0, 1), "");&lt;br/&gt;};&lt;br/&gt;if (contains(values.temp_last3, substring(values.recalledwords, 1, 1))){&lt;br/&gt;values.countCorrectWords += 1;&lt;br/&gt;values.temp_last3 = replaceall(values.temp_last3, substring(values.recalledwords, 1, 1), "");&lt;br/&gt;};&lt;br/&gt;if (contains(values.temp_last3, substring(values.recalledwords, 2, 1))){&lt;br/&gt;values.countCorrectWords += 1;&lt;br/&gt;values.temp_last3 = replaceall(values.temp_last3, substring(values.recalledwords, 2, 1), "");&lt;br/&gt;};&lt;br/&gt;&lt;br/&gt;list.correctwords.insertitem(values.countCorrectWords, 1);&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;if (values.countCorrectWords != 3){&lt;br/&gt;trial.recall_end.insertstimulusframe(text.errorFeedback, 1);&lt;br/&gt;values.correct = 0;&lt;br/&gt;} else {&lt;br/&gt;trial.recall_end.insertstimulusframe(text.correctFeedback, 1);&lt;br/&gt;values.correct = 1;&lt;br/&gt;};&lt;br/&gt;list.accuracy.insertitem(values.correct, 1);&lt;br/&gt;]&lt;br/&gt;/ stimulusframes = [1 = clearscreen, continue]&lt;br/&gt;/ validresponse = (continue)&lt;br/&gt;/ recorddata = true&lt;br/&gt;/ posttrialpause = parameters.ITI&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;Nowhere are you actually keeping the entire words, you're just extracting single letters and keeping those around. What you'll probably want to do is keep the words intact and use the contains() string function to check whether the response string holds the proper words.&lt;br/&gt;</description><pubDate>Mon, 29 Oct 2018 07:45:30 GMT</pubDate><dc:creator>Dave</dc:creator></item></channel></rss>