schm-reduplication(意第绪语)形态学过程
schm-reduplication (yiddish) morphological process
根据定义,schm-reduplication 是一种重复形式,其中原始单词或其第一个音节(基础)与副本(重复项)重复,开头为shm-.
baby -> schmaby
sprinkler -> schminkler
artist -> schmartist
因此,直到单词的第一个元音之前的所有字母都被删除,并在其前面加上 'schm'。
如何将其转化为代码?
我在想..
(1) 获取列表。 (2) 删除所有元素,直到检测到第一个元音。所以我认为这会很有用:vowel(X):- member(X,[a,e,i,o,u]).
所以我需要将第一个元素扫描到末尾,一旦我到达元音,我就会保留它并在前面添加一个 'schm'.
我在删除元音部分之前的所有元素时遇到问题。有人可以帮忙吗?
我有:
yiddish(A,B):-
append([s,c,h,m],A,B).
?- yiddish([h,o,u,s,e],X).
X = [s, c, h, m, h, o, u, s, e].
您的架构可以像
一样实施
yiddish(A,B) :- after_first_vowel(A,AFV), append([s,c,h,m],AFV,B).
% here some decision should be taken about data correctness
after_first_vowel([C|Cs],[C|Cs]) :- memberchk(C,[a,e,i,o,u]), !.
after_first_vowel([_|Cs],Rs) :- after_first_vowel(Cs,Rs).
基础测试:
?- atom_chars(baby,Cs),yiddish(Cs,L).
Cs = [b, a, b, y],
L = [s, c, h, m, a, b, y]
根据定义,schm-reduplication 是一种重复形式,其中原始单词或其第一个音节(基础)与副本(重复项)重复,开头为shm-.
baby -> schmaby
sprinkler -> schminkler
artist -> schmartist
因此,直到单词的第一个元音之前的所有字母都被删除,并在其前面加上 'schm'。
如何将其转化为代码?
我在想..
(1) 获取列表。 (2) 删除所有元素,直到检测到第一个元音。所以我认为这会很有用:vowel(X):- member(X,[a,e,i,o,u]).
所以我需要将第一个元素扫描到末尾,一旦我到达元音,我就会保留它并在前面添加一个 'schm'.
我在删除元音部分之前的所有元素时遇到问题。有人可以帮忙吗?
我有:
yiddish(A,B):-
append([s,c,h,m],A,B).
?- yiddish([h,o,u,s,e],X).
X = [s, c, h, m, h, o, u, s, e].
您的架构可以像
一样实施yiddish(A,B) :- after_first_vowel(A,AFV), append([s,c,h,m],AFV,B).
% here some decision should be taken about data correctness
after_first_vowel([C|Cs],[C|Cs]) :- memberchk(C,[a,e,i,o,u]), !.
after_first_vowel([_|Cs],Rs) :- after_first_vowel(Cs,Rs).
基础测试:
?- atom_chars(baby,Cs),yiddish(Cs,L).
Cs = [b, a, b, y],
L = [s, c, h, m, a, b, y]