1

私はプロローグにかなり慣れていないので、宿題のために変更するコードを与えられました。しかし、私は刺し傷を入力することに固執しています。prolgo に入力された文字列が ASCII コードのリストであることは承知しています。つまり、「abc」= [97、98、99]

これは与えられたコードです

accept(W) :- start(S), path(S, W).
path(S, []) :- final(S).
path(S, [H|T]) :- arc(S, H, N), path(N, T).
start(1).
final(3).
arc(1, a, 1).
arc(1, b, 2).
arc(2, a, 2).
arc(2, b, 3).
arc(3, a, 3). 

これは、文字列がどのように実装されているかを知っている非決定論的なマシンです。

arc(1, 97, 1).
arc(1, 98, 2).
arc(2, 97, 2).
arc(2, 98, 3).
arc(3, 97, 3). 

a と b の文字列を入力できるようにしますが、うまくいきませんでした。ありがとうございました

4

2 に答える 2

0

文法をより読みやすい形式に保ち、文字コードから文字への変換を適用できます。

3 ?- maplist(char_code, W, "aabaabaaa"), accept(W).
W = [a, a, b, a, a, b, a, a, a] 

また

9 ?- read_line_to_codes(user_input, Cs), maplist(char_code, W, Cs), accept(W).
|: abab
Cs = [97, 98, 97, 98],
W = [a, b, a, b] 

それ以外の場合、文字リテラルの構文は次のとおりです。

arc(1, 0'a, 1).
arc(1, 0'b, 2).
arc(2, 0'a, 2).
arc(2, 0'b, 3).
arc(3, 0'a, 3). 

その変更後(または数値表現を使用してarc(1, 97, 1).

% /home/carlo/prolog/stackoverflow compiled 0.01 sec, 23 clauses
10 ?- read_line_to_codes(user_input, W), accept(W).
|: abab
W = [97, 98, 97, 98] 
于 2013-09-06T06:34:39.223 に答える