-1

我正在使用 jsPsych 为教授设置认知实验,其中刺激是大约 200 个T ∧ F ∨ T形式的逻辑语句,具有 4 种不同的间距类型。我需要找到一种方法来生成以正确顺序编写的三个真值、两个逻辑运算符和 四种间距类型的每种组合,而无需手动输入它们(希望如此)。

具体如下:

间距类型(其中 -- 表示空格):

1) T∧T∨T即没有空格 2) T∧--T∨T 3) T∧T--∨T 4) T∧--T--∨T

运营商

1) ∧ ∧ , 2) ∨ ∨ , 3) ∧ ∨ , 4) ∨ ∧

真值

T 和 F 的所有 3 组合(有 8 个)。例如TTTTTFFTFFFF等。

所以我需要遍历这三件事的所有组合,将它们组合成字符串(用 html 编写),并生成一个包含所有字符串的列表或数组(大约有 200 个)。我对 cs 很陌生,所以对这个问题的任何帮助都表示赞赏,这对我来说实在是太多了!

note感谢评论者指出我没有包括我尝试过的东西。

我一直在尝试使用 3-5 个嵌套的 for 循环。我最初设置了一个大小为 7 的数组(因为这是字符串的最长可能长度)并使用 for 循环填充数组的空间。我使用这条路线几乎完全不成功。它似乎很有希望,也许我可以让它工作,但它也很不优雅而且很长,我现在想知道是否有更直接的方法来做到这一点。同样,由于我是新手,因此可能存在我不知道的资源。

谢谢!

4

3 回答 3

1

为了快速,我会使用js-combinatorics

Combinatorics.cartesianProduct(
    ['     ', '--   ', '   --', '-- --'],
    ['^^', 'vv', '^v', 'v^'],
    [ true, false ],
    [ true, false ],
    [ true, false ]
).toArray()
于 2018-04-01T00:55:54.600 回答
0

感谢之前的答案向我展示了 js-combinatorics。事实证明,您发布的代码不能完全正常工作(因为每个数组都对应于位置)。但它帮助我弄清楚了。

Combinatorics.cartesianProduct(
            ['T', 'F'],
            ['∧', '∨'],
            ['T', 'F'],
            ['∧', '∨'],
            ['T', 'F']
    ).toArray();

然后需要在使用简单循环生成该列表后添加每种间距类型的空格。

于 2018-04-01T17:23:20.623 回答
0

对于这种情况, jsPsych 有一个内置的阶乘方法

文档中的示例:

var factors = {
    stimulus: ['a.jpg', 'b.jpg'],
    ms_delay: [100, 200]
}

var full_design = jsPsych.randomization.factorial(factors, 1);

/*
output:
full_design = [
    {stimulus: 'a.jpg', ms_delay: 200},
    {stimulus: 'b.jpg', ms_delay: 200},
    {stimulus: 'b.jpg', ms_delay: 100},
    {stimulus: 'a.jpg', ms_delay: 100},
]
*/

您可以根据您的问题调整它,尽管您随后需要对输出进行一些争论以使其成为您正在寻找的确切格式。

于 2018-04-05T13:57:58.150 回答